2013-04-29 20 views
6
Ember.Array

エンバーのv1.0.0デベロッパー - rc.3のドキュメントは言う:エンバーのを使用して、いくつかの配列の変更を観察するために「(..)観察」

あなたは配列にアクセスし、変更するには、このモジュールで定義されたメソッドを使用することができますKVOに優しい方法でコンテンツを提供します。プロパティの構文を.observes( '* myProperty。[]')に変更することで、メンバーシップが配列変更されたときにメンバーシップが通知されることもあります。

私は、アレイの変更を観察する最小限の例を考え出しましたが、オブザーバを起動できませんでした。作業サンプルはどのように見えますか?

P.S.通知this gotcha

+1

あなたの非実用的な例の設定はできますか? – intuitivepixel

答えて

9

ああ、私の答えがあります!

Em.A()プロパティを確認するには、いくつかの方法があります。 .observes('a.[]').observes('[email protected]')、および.observes('a.length')があります。コンセプトはEmberの任意のプロパティと同じですが、配列を直接操作するだけでオブザーバは起動する必要があります。明らかにsetメソッドを使用することは、(Ember)配列では動作しません。したがって、おそらくどこが間違っているのでしょうか?

私は私の古いjsfiddleを観測可能な配列のために修正しました(私はすべてを最新バージョンに更新しました)。

Ember Arrayは実際に配列ではなく、通常の配列のjavascript関数を実装するカスタム関数やプロパティを持つオブジェクトです。したがって、Em.Aの型はオブジェクトであり配列ではないため、Em.A() = [1,2,3]のようなことはできません。

別の有用なノートはArrayControllersはあなたがコンテンツの配列ではなく、コンテンツそのものを(すなわちarraycontroller.contentを観察し、代わりにarraycontroller.content.[]を観察していない)を観察する必要があることを意味し、エンバーのアレイのコンテンツを持っていることです。

これは、Ember配列の値が期待していない値なので、Ember配列のprop.[]プロパティを奇妙に見なければならない理由です。

+0

この偉大なフィードバックと洞察力のためにDeifさんに感謝します...はい、私はいくつかの類似した落書きのために働いていたサンプルを得ませんでした:私は(あなたのjsFiddleの例に固執しました) 'this.person.push(3)' 'this.person.pushObject(3)'の代わりに。 'observes(..)'オブザーバを起動させるために 'pushObject(..)'メソッドを使う必要があります。 [これは、Emberのドキュメントが "KVOに準拠している"という意味です(http://emberjs.com/api/classes/Ember.MutableArray.html#method_pushObject)。 – Abdull

+0

恐ろしい... !!! @Deif –

関連する問題