请耐心等待我,因为我是JS的新手并且在使用Meteor实现某些功能时遇到了麻烦。我使用
在JavaScript中实现了一个类function Class() {
this.property = 0
this.method = function () {
return "method called"
}
}
我使用新的Meteor.collection创建了一个新的Meteor Collection,并成功检索了客户端上的数据,并可以在html模板中显示Class.property。但是,我无法访问Class.method并且想知道是否有任何方法可以实现这一点,并且如果使用Meteor.methods定义以Class实例作为输入的函数是最好的方法。
答案 0 :(得分:3)
对于仍然在看这个的人来说,代码不起作用的原因是因为mongodb将文档存储为bson。 bson,就像json一样,不支持函数(http://bsonspec.org)所以当上面的类被meteor保存到mongo中时,该方法不会保存为文档的一部分。
我知道没有简单优雅的解决方案。我有同样的问题。为了利用类方法,您需要在每次需要时实例化该类,您可以将其作为数据库模型的一部分来实现。
答案 1 :(得分:1)
这不是一个真正的答案,但在meteor的软件包管理器中你可以添加像backbone.js这样的库,它可以为你提供模型,集合和视图以及一个很好的路由器,在制作流星应用程序时我觉得非常方便。 Backbone与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"
答案 2 :(得分:1)
我当时也想做同样的事情。
我找到了一个名为" transform"从流星集合中获取内容时调用。您可以使用它根据需要将功能添加到流星对象。
以下是添加" endDate"的示例。功能和"剩余"函数到流星对象
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;
}
});
在这里阅读更多内容: http://www.okgrow.com/posts/2014/05/19/meteor-transform/
答案 3 :(得分:0)
答案 4 :(得分:-2)
我对Meteor一无所知,但我发现您的代码存在问题。你之后错过了分号:
this.property = 0
如果没有这种分号,javascript解释器将不会执行this.method赋值。