Ember.js绑定没有触发更改

时间:2012-10-22 19:09:47

标签: javascript ember.js

我有一个包含3个项目的容器对象。每个项目都有一些文本字段(例如:text1,text2,text3,text4)。除此之外,我还有一个计算属性,它根据名为currentItemIndex的属性返回当前项。

所以,基本上,这是'项目模型':

App.Item = Ember.Object.extend({
    text1: null,
    text2: null,
    text3: null,
    text4: null
});

这是计算属性

App.currentItemIndex = 0;
App.currentItem = function () {
    return App.containerObject[App.get('currentItemIndex')];
}.property('App.currentItemIndex');

模拟数据源看起来像这样:

App.containerObject.pushObject(App.Item.create({text1:'Text 1', text2:'Text 2', text3:'Text 3', text4:'Text 4'}));
App.containerObject.pushObject(App.Item.create({text1:'Text 1', text2:'Text 2', text3:'Text 3', text4:'Text 4'}));
App.containerObject.pushObject(App.Item.create({text1:'Text 1', text2:'Text 2', text3:'Text 3', text4:'Text 4'}));

因此,您可以看到每个项目具有相同的文本值,当我将App.currentItemIndex更改为任何值0,1或2 时,绑定将不会触发某些内容已更改的通知。< / strong>,因为当然属性没有改变,但是对象是新的。

所以问题是: 如何强制触发此通知以相应地更新视图?

2 个答案:

答案 0 :(得分:2)

我想知道你如何改变App.currentItemIndex的价值。你必须在这里使用set方法,例如:

 App.set('currentItemIndex', 1)

请注意,您可以使用App.containerObject.objectAt(App.get('currentItemIndex'))而非访问App.containerObject[App.get('currentItemIndex')]

编辑:这是一个有效的jsfiddle:http://jsfiddle.net/Sly7/c4bA2/69/

我总是使用get / set来访问属性,并在应用程序中声明它们。

答案 1 :(得分:0)

小提琴:here

问题是由removeClass('btn-success btn-danger')电话引起的。这很奇怪,因为在jQuery Docs它表示你可以一次删除多个类。

所以,如果我只使用removeClass('btn-success')removeClass('btn-danger'),那么一切正常。