Meteor - ViewModel链接到集合

时间:2015-08-08 15:55:46

标签: meteor viewmodel

这一部分就在我挣扎的地方。

Template.Calculator.viewmodel({
    a: 0,
    b: 0,
    c: 0,
    total: function(){
        return parseInt(this.a(), 10) + parseInt(this.b(), 10) + parseInt(this.c(), 10);
    }
})

而不是让变量等于0,我怎样才能让他们从集合中提取首次提交时或更新后保存的值?例如,让我们说我最后一次保存为7而b为6,它将使用:6 b:7 c:0加载页面并计算。我正在努力从集合中提取数据。

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。

如果您知道在创建模板时数据订阅准备就绪,您可以这样做:

Template.Calculator.viewmodel( function() { var dv = DefaultValues.findOne(); return { a: dv.a, b: dv.b, c: dv.c, total: function () { return this.a() + this.b() + this.c(); } } } );

如果您有许多默认值,则可以在创建视图模型时使用该文档:

Template.Calculator.viewmodel( function() { // Add all properties to the view model return DefaultValues.findOne(); // or pluck the values }, { total: function () { // We're assuming the default document will have properties a, b, and c. return this.a() + this.b() + this.c(); } } );

如果您不知道数据何时准备就绪,那么您可能会覆盖用户的值。这一切都取决于您订阅数据的位置以及订阅何时准备好。以下示例在创建模板时进行订阅,并在数据准备就绪后立即更新值。

Template.Calculator.viewmodel({ a: 0, b: 0, c: 0, total: function () { return this.a() + this.b() + this.c(); }, onCreated: function (template) { var that = this; template.subscribe('defaultData', function(){ var dv = DefaultValues.findOne(); that.a(dv.a); that.b(dv.b); that.c(dv.c); }) } });

同样,这一切都取决于你如何获取数据,这样你最终可能会做出与这些不同的事情。

有关详细信息,请参阅Defining View Models

相关问题