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);

何も起こりません。ビューは更新されません。

離れてから同じ状態に戻ると(ここではプッシュステートのみを話している)、ビューが更新されます。

コンソールから値を変更しようとしました。に設定すると[]、すべての画像が希望どおりに消えます。空でない配列に設定しようとすると、機能する場合もあれば、未定義の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 に答える