【问题标题】:Ember.js bindings not firing changesEmber.js 绑定不触发更改
【发布时间】:2012-10-12 15:44:37
【问题描述】:

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

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

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    我想知道你如何更改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 来访问属性,并在应用程序中声明它们。

    【讨论】:

    • 是的,我使用 App.set('currentItemIndex', anyNumber) 来设置索引当然:),我也知道 objectAt 方法。但这无济于事。
    • 只有当我对这些项目使用相同的文本值时才会发生这种情况,如果我使用不同的值,那么它将检测到更改并触发事件。
    • 我想我知道现在有什么问题了:)
    • 抱歉浪费您的时间,显然问题出在 Twitter Bootstrap Button 插件的某个地方。我认为我没有很好地使用某些东西。
    • 事实上,当使用 $(#btnId).button("loading") 我认为你正在打破 Ember 的变形系统。至少它会破坏视图,然后当通知被触发时,就会出现错误。
    【解决方案2】:

    小提琴:here

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 2012-01-31
      • 2014-07-28
      • 2012-11-15
      • 2015-12-24
      • 1970-01-01
      相关资源
      最近更新 更多