鉴于对象具有良好的反应性,
var obj = {
foo : new ReactiveVar(0),
bar : new ReactiveVar(0)
};
我可以通过跟踪器计算轻松地对这些字段做出反应:
Tracker.autorun(function logObj() {
console.log('obj.foo is:', obj.foo.get());
console.log('obj.bar is:', obj.bar.get());
});
但是,如果我知道将来会obj.baz
定义,我也想在定义后立即对 作出反应 我不能这样做:
Tracker.autorun(function logObj() {
console.log('obj.foo is:', obj.foo.get());
console.log('obj.bar is:', obj.bar.get());
if(obj.hasOwnProperty('baz')) console.log('obj.baz is:', obj.baz.get());
});
这种情况发生的原因是如果它在没有定义obj.baz
的情况下运行,那么它就不会在其上添加依赖关系,因此如果它出现或发生变化则不会重新运行。 obj.baz
将被解决的唯一方法是foo
或bar
在定义baz
时使计算无效,从而调用.get()
并创建依赖关系。
如何对创建尚未定义的对象字段做出反应?我更喜欢ES5中的答案,但我对ES6或ES7没问题。