1

给定一个充满良好反应性的物体,

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反应方式是如果定义了计算foobar使计算无效baz,从而调用.get()并创建依赖项。

我如何对尚未定义的对象字段的创建做出反应?我更喜欢 ES5 中的答案,但我对 ES6 或 ES7 没问题。

4

0 回答 0