如何在可能不存在的被动对象字段上创建被动依赖?

时间:2015-08-23 17:42:00

标签: javascript meteor meteor-tracker

鉴于对象具有良好的反应性,

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将被解决的唯一方法是foobar在定义baz时使计算无效,从而调用.get()并创建依赖关系。

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

0 个答案:

没有答案