这一部分就在我挣扎的地方。
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加载页面并计算。我正在努力从集合中提取数据。
感谢您提供的任何帮助!
答案 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。