3

请多多包涵,因为我是 JS 新手,并且在使用 Meteor 实现某些事情时遇到了麻烦。我用 JavaScript 实现了一个类

function Class() {
  this.property = 0
  this.method = function () {
  return "method called"
  }
}

我使用 new Meteor.collection 制作了一个新的 Meteor Collection bu,并成功检索了客户端上的数据,并且可以在 html 模板中显示 Class.property。但是,我无法访问 Class.method 并且想知道是否有任何方法可以实现这一点,以及使用 Meteor.methods 定义将 Class 实例作为输入的函数是否是最好的方法。

4

5 回答 5

3

对于仍在查看此内容的任何人,代码不起作用的原因是因为 mongodb 将文档存储为 bson。bson 和 json 一样,不支持函数(http://bsonspec.org),所以当上面的类被流星保存到 mongo 中时,该方法不会作为文档的一部分保存。

我知道没有简单优雅的解决方案。我有同样的问题。为了利用类方法,您需要在每次需要时实例化该类,您可以将其作为数据库模型的一部分来实现。

于 2013-06-18T22:11:59.423 回答
1

这不是一个真正的答案,但在流星的包管理器中,您可以添加诸如骨干网之类的库,它为您提供模型、集合和视图以及一个不错的路由器,我发现在制作流星应用程序时非常方便。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"
于 2012-07-18T13:52:08.220 回答
1

我想做同样的事情。

我发现了一个名为“transform”的函数,当从流星集合中获取某些东西时会调用它。您可以根据需要使用它向流星对象添加功能。

这是向流星对象添加“endDate”函数和“remaining”函数的示例

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/

于 2015-11-04T20:35:01.430 回答
0

这种方法对我来说效果很好:

http://www.okgrow.com/posts/2014/05/19/meteor-transform/

于 2015-02-04T05:04:00.797 回答
-2

我对 Meteor 一无所知,但我发现您的代码有问题。您在以下内容后缺少分号:

this.property = 0

如果没有该分号,javascript 解释器将不会执行 this.method 分配。

于 2012-07-18T10:55:52.837 回答