不要介意此代码使用完整路径和其他内容。那些会改变!
我有这个控制器代码:
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。
答案 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属性时,没有任何反应。如果我离开并返回相同的状态,那么我可以看到代码中的变化。