在面向对象的风格中使用流星和JavaScript
请耐心等待我,因为我是JS的新手,并且在使用Meteor执行某些操作时遇到了麻烦。我实现了一类在JavaScript中使用在面向对象的风格中使用流星和JavaScript
function Class() {
this.property = 0
this.method = function() {
return "method called"
}
}
我做了一个新的流星系列BU使用新Meteor.collection和成功检索到客户端上的数据,并可以在HTML模板显示Class.property。但是,我无法访问Class.method并想知道是否有任何方法可以实现这一点,并且如果使用Meteor.methods来定义将Class实例作为输入的函数是最好的方法。
对于任何人仍在寻找这个,代码不起作用的原因是因为MongoDB中存储文档的BSON。 bson,就像json一样,不支持函数(http://bsonspec.org),所以当上面的类被meteor保存为mongo时,该方法不会保存为文档的一部分。
我没有想到的简单优雅的解决方案。我有同样的问题。为了利用类方法,您需要在每次需要时实例化类,这可以作为数据库模型的一部分实现。
我对流星一无所知,但是我发现你的代码有问题。你错过了一个分号后:
this.property = 0
没有这个分号,JavaScript解释器将不会执行this.method分配。
这不是一个真正的答案,但在流星的包管理器中,您可以添加如backbone.js这样的库,为您提供模型,集合和视图以及一个很好的路由器,我在制作流星应用时非常方便。主干与jQuery配合良好。
我的另一个建议是使用像Mootools这样的库,它不像jQuery那样尝试改变你写javascript的方式,但是增强了制作面向对象的javascript的体验。 (见:jqueryvsmootools)。通过MooTools,你可以可以使一个类中的下列方式...
var MyClass = new Class({
'Implements': [Options],
//default options
'options': {
'foo': null
},
'initialize': function(options) {
this.foo = options.foo;
},
'bar' : function() {
return this.foo;
}
});
var blub = new MyClass({'foo': 'Hello World'});
blub.bar(); // "Hello World"
我一直在寻找做同样的事情。
我发现了一个名为“变换”的函数,当从流星集合中获取某些东西时会调用它。您可以使用它来根据需要添加一个函数到流星对象。
这里是增加一个“结束日期”功能和“剩余”的功能流星对象
Products = new Meteor.Collection("Products", {
transform: function (doc) {
doc.endDate = function() {
// SugarJS gives us minutesAfter() which gives us a nice syntax for
// creating new Date objects
// http://sugarjs.com/api/Number/unitAfter
return ((25).minutesAfter(this.startDate));
};
doc.remaining = function() {
return this.endDate().getTime() - Date.now();
};
return doc;
}
});
在这里阅读更多的例子:如果您发送Class`你的`实例 http://www.okgrow.com/posts/2014/05/19/meteor-transform/
不能使用类的方法。当你使用'Meteor.call'流星将你的params序列化为json并发送那个json。由于范围的原因,不能将函数序列化为json。 – nepjua 2013-11-10 18:39:34