给定一个充满良好反应性的物体,
var obj = {
foo : new ReactiveVar(0),
bar : new ReactiveVar(0)
};
我可以通过 Tracker 计算轻松地对这些字段做出反应:
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 没问题。