Ember.js数组属性更改不会带来所需的模板更新

时间:2012-11-09 21:22:23

标签: ember.js

不要介意此代码使用完整路径和其他内容。那些会改变!

我有这个控制器代码:

App.ProductsOneController.reopenClass({
    product: {
        images: []
    }
});

然后是一个在其模板中有这个的视图:

{{#each image in App.ProductsOneController.product.images}}
    <li class="small-image">
        <img src="{{unbound image}}-small.png" />
    </li>
{{/each}}

我想要做的是显示根据图像阵列内容更新的图像列表。

当我做这样的事情时:

imageUrl = response.data.folder + response.data.imagedId;
tempImages = Ember.get(App.ProductsOneController, "product.images");
tempImages.unshift(imageUrl);
Ember.set(App.ProductsOneController, "product.images", tempImages);

什么都没发生。视图未更新。

如果我离开,然后返回到同一状态(我们只在这里说pushstate),视图会更新。

我试图从控制台更改值。当我将其设置为[]时,所有图像都会根据需要消失。如果我尝试将它设置为非空数组,有时它会工作,有时它会给我一个类型错误,提到一个未定义的childView。

2 个答案:

答案 0 :(得分:4)

@ sly7_7指出你正在使用Ember。您需要将srcBinding绑定到控制器的实例,而不是类。

reopenClass用于在类对象上设置函数或数据。你使用它没有意义。为了使绑定工作,您希望与实例交互,而不是类。

// We are treating App.Controller is a class
App.Controller = Ember.Controller.extend();

// We are treating App.controller as an instance
App.controller = App.Controller.create();

所以你的代码应该是这样的。

App.controller = Ember.Controller.create({ image: 'blah' });

然后

{{view App.ImageView srcBinding="App.controller.image"}}

现在,当您更改App.controller.image时,绑定将更新。

答案 1 :(得分:1)

我经常被挖掘出来并发现了一些关于我做错事的事情。

首先,绑定。首先,我有一个未绑定的东西,这使得事情不会得到更新。其次,我应该使用ImageView。

我开始这样做,将它与srcBinding一起使用。但它仍然无效。我不知道我是否还在做错事,或者这是一个错误。

App.ImageView = Ember.View.extend({
    tagName: 'img',
    attributeBindings: ['src']
});

{{view App.ImageView srcBinding="App.ProductsOneController.firstImage"}}

但更新仍然没有发生。实际上,一切都以相同的方式工作:当我更改firstImage属性时,没有任何反应。如果我离开并返回相同的状态,那么我可以看到代码中的变化。