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,我如何让它们从集合中提取在第一次提交或更新发生后保存的值?举个例子,假设上次我把a保存为7,把b保存为6,它会用a: 6 b:7 c:0加载页面,然后计算。我正努力从集合中提取这些数据。

谢谢你提供的任何帮助!

有很多方法。

如果你知道数据订阅将在模板创建时准备好,你可以这样做:

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); }) } });

同样,这完全取决于你如何获取数据,所以你最终可能会做一些不同于这些的事情。

相关内容

  • 没有找到相关文章

最新更新