这是我最纠结的地方。
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);
})
}
});
同样,这完全取决于你如何获取数据,所以你最终可能会做一些不同于这些的事情。