Ember.js 组件上的ComputedProperty仅在第一次将关注的特性设置为给定值时更新(当特性为模型特性时)

Ember.js 组件上的ComputedProperty仅在第一次将关注的特性设置为给定值时更新(当特性为模型特性时),ember.js,ember-data,Ember.js,Ember Data,我似乎对ember 1.7.0组件内部的计算属性有点问题。假设我有两个模型,A和B。A和B之间有“归属”关系 在我的组件模板上,我有一个Ember.Select控件,它允许我们为a选择一个B条目 {{view Ember.Select class="form-control" content=bList selection=objectA.objectB optionValuePath="content.id" optionLabelPath="content.name"}} 在我的组件中,我

我似乎对ember 1.7.0组件内部的计算属性有点问题。假设我有两个模型,A和B。A和B之间有“归属”关系

在我的组件模板上,我有一个Ember.Select控件,它允许我们为a选择一个B条目

{{view Ember.Select class="form-control" content=bList selection=objectA.objectB optionValuePath="content.id" optionLabelPath="content.name"}}
在我的组件中,我有一个计算属性,它监视
objectA.objectB
上的更改,如下所示:

isSomething: function() {
    return this.get("objectA.objectB.id") === "some id";
}.property("objectA.objectB"),
然后在我的组件模板中,我根据
isSomething
的值有条件地显示一些内容:

{{#if isSomething}}
    Something :D
{{/if}}
如果我在
isSomething
computed属性中放置一个断点,并在select控件上选择一个新值,它将按预期命中断点。在我选择一个新值后,它将再次命中。但是如果我再次选择原始值,断点将不会命中(组件也不会重新加载)。它似乎只在我第一次在select控件中选择任何给定值时出现。起初我认为这可能是缓存的问题,但向属性添加
volatile()
似乎没有什么不同

我可以通过将select控件选择绑定到组件上的属性(如
tempObjectB
)并将
isSomething
监视的属性更改为
tempObjectB
来解决此问题,如下所示:

isSomething: function() {
    return this.get("tempObjectB") === "some id";
}.property("tempObjectB"),
updateObjectA: function() {
    this.set("objectA.objectB", this.get("tempObjectB"));
}.observes("tempObjectB"),
然后,为了更新
objectA
的引用,我可以使用一种方法来观察
tempObjectB
的所有更改,并更新
objectA.objectB
,如下所示:

isSomething: function() {
    return this.get("tempObjectB") === "some id";
}.property("tempObjectB"),
updateObjectA: function() {
    this.set("objectA.objectB", this.get("tempObjectB"));
}.observes("tempObjectB"),
这些更改将允许每次更改select控件中的值时命中断点

有人知道是什么导致了这种行为吗?我不想创建一个临时变量


  • 两者之间的唯一区别是,第一个存储箱存储和监视
    objectA.objectB
    ,而第二个存储箱存储和监视
    tempObjectB

    ,对于任何无意中访问该存储箱的人来说,它似乎在最新的Ember.js版本(1.8.1)中已经修复


    您介意创建一个jsbin来显示问题吗。这里有一些很好的开始模板:Doh。。。我应该用原来的帖子做到这一点。。。将很快更新!