以面向对象的方式使用Meteor和javascript
请容忍我,因为我是JS新手,在使用Meteor实现某些东西时遇到了困难。我使用JavaScript实现了一个类以面向对象的方式使用Meteor和javascript,javascript,meteor,Javascript,Meteor,请容忍我,因为我是JS新手,在使用Meteor实现某些东西时遇到了困难。我使用JavaScript实现了一个类 function Class() { this.property = 0 this.method = function () { return "method called" } } 我使用new Meteor.Collection创建了一个新的Meteor Collection bu,并成功地在客户端检索到数据,并且可以在html模板中显示Class.propert
function Class() {
this.property = 0
this.method = function () {
return "method called"
}
}
我使用new Meteor.Collection创建了一个新的Meteor Collection bu,并成功地在客户端检索到数据,并且可以在html模板中显示Class.property。但是,我无法访问Class.method,我想知道是否有任何方法可以实现这一点,并且使用Meteor.methods定义以类实例作为输入的函数是否是最好的方法。我对Meteor一无所知,但我发现您的代码有问题。您在以下情况下缺少分号:
this.property = 0
如果没有分号,javascript解释器将无法执行this.method分配。这不是一个真正的答案,但在meteor的软件包管理器中,您可以添加库,这样可以为您提供模型、集合和视图,以及一个我觉得在制作meteor应用程序时非常方便的漂亮路由器。主干网可以很好地与用户交互 我的另一个建议是使用类似于jQuery的库,它不会试图改变编写javascript的方式,而是增强制作面向对象javascript的体验。(见:)。使用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"
对于仍然关注这一点的人来说,代码不起作用的原因是mongodb将文档存储为bson。与json一样,bson不支持函数(),因此当meteor将上述类保存到mongo中时,该方法不会保存为文档的一部分
据我所知,没有简单而优雅的解决方案。我也有同样的问题。为了使用类方法,您需要在每次需要时实例化类,您可以将其作为数据库模型的一部分来实现。这种方法对我来说非常有效:
我想做同样的事情 我发现了一个名为“transform”的函数,当从meteor集合中获取某些内容时会调用该函数。您可以根据需要使用它向meteor对象添加函数 下面是一个向meteor对象添加“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;
}
});
请在此处阅读更多信息:
这是javascript。分号是不必要的。分号是绝对必要的。通过jslint运行代码。在其下方添加选项以忽略strict并在浏览器中运行。你需要一个分号。可能是您的代码没有运行的原因。我同意分号有助于良好的实践,但仍然不需要。这是来自jslint(我不确定它是否是一个好工具,您的浏览器控制台可能是一个更好的测试工具)“JavaScript试图通过分号插入机制使这些分号成为可选的。”。尝试创建返回值为“hi”的函数\n;“hi”不会被返回。@Ameen——这就是我说的如果你发送一个
Class
的实例,你就不能使用Class的方法。当您使用Meteor.call时,Meteor将您的参数序列化为json并发送该json。由于作用域的原因,无法将函数序列化为json。