1

我有一个包含 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时,绑定不会触发某些内容已更改的通知。,因为当然属性没有改变,但对象是一个新的。

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

4

2 回答 2

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 来访问属性,并在应用程序中声明它们。

于 2012-10-22T20:58:29.053 回答
0

小提琴:这里

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

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

于 2012-10-22T22:18:11.623 回答