2

不要介意这段代码使用完整路径和其他东西。那些会改变的!

我有这个控制器代码:

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。

4

2 回答 2

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 时,绑定将更新。

于 2012-11-10T15:28:16.913 回答
1

我一直在挖掘很多东西,并发现了一些关于我做错了什么的事情。

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

我开始这样做,将它与 srcBinding 一起使用。但它仍然不起作用。我不知道我是否仍然做错了什么,或者这是一个错误。

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

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

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

于 2012-11-10T11:28:09.957 回答