2015-05-26 45 views
1

我无法理解下面的语句,并已经阅读它多次不幸:混淆观察员和未消耗的计算属性

如果你从来没有得到一个计算的属性,它的观察员将不若其依赖火甚至 键改变。您可以将价值从 一个未知值更改为另一个。

这通常不会影响应用程序代码,因为计算的 属性几乎总是在取得 的同时被观察到。例如,您可以获取计算属性的值,将其放入DOM(或使用D3绘制),然后观察它,以便在属性更改后更新 DOM。

这是

http://guides.emberjs.com/v1.11.0/object-model/observers/

观察者的例子部分是:

Person = Ember.Object.extend({ 
    init: function() { 
    this.set('salutation', "Mr/Ms"); 
    }, 

    salutationDidChange: function() { 
    // some side effect of salutation changing 
    }.observes('salutation').on('init') 
}); 

这是否意味着,如果我不叫

person.get('salutationDidChange')它会被视为未消费的计算属性,即使也不会执行更改?

+3

你为什么这么问?如果两种方式都运行代码,并查看您的观察者函数是否被调用。 – Halcyon

回答

1

所有他们说的是,如果你有一个观察者function(){}.observes('salutations'),你有一个计算的属性salutationsfunction(){}.property('otherValue'),观测时不会otherValue只有当.property()已经被浏览火,它返回一个不同的值。

列出的示例与标题无关。一个更好的例子是:

var auth = Ember.Object.extend({ 
    isAuthenticated: false, 
    currentUser: function(){ 
    // When foo.get('currentUser') is accessed I will trigger. 
    console.log('currentUser') 
    }.property('isAuthenticated'), 
    doThing: function(){ 
    // When the value `currentUser` changes, I will trigger. 
    console.log('doThing') 
    }.observes('currentUser') 
}); 

如果isAuthenticated变化,doThing不会触发,直到您访问currentUser。对isAuthenticated的更改不会通过隐式触发doThing的属性级联。