Ember.js: コンポーネントのインスタンス間で共有される配列プロパティ値

作成日 2013年12月11日  ·  3コメント  ·  ソース: emberjs/ember.js

私が何か間違ったことをしたかどうかはよくわかりませんが、ここにあります。
いくつかのプロパティを持つコンポーネントを作成しました。それらはすべて、コンポーネントインスタンスのスコープ内で正しく機能します。 ただし、配列値を使用してプロパティを追加すると、予期しない動作が発生します。要素が@setを介してコンポーネントの配列にプッシュされると、各コンポーネントのプロパティにプッシュされます。

最も参考になるコメント

私はあなたが次のようなものを持っていると思います:

App.MyThingsComponent = Ember.Component.extend({
  things: []
}):

これは、インスタンス化されたときではなく、クラスが定義されたときに評価されるため、すべてのコンポーネントに同じ配列のインスタンスを使用します。

これを修正するには、コンポーネントの初期化時に配列をインスタンス化します。

App.MyThingsComponent = Ember.Component.extend({
  things: null,
  setupThings: function(){
    this.set("things", []);
  }.on("init")
}):

これで、コンポーネントインスタンスごとに新しい配列インスタンスが取得され、期待どおりに動作するはずです。

hth

全てのコメント3件

私はあなたが次のようなものを持っていると思います:

App.MyThingsComponent = Ember.Component.extend({
  things: []
}):

これは、インスタンス化されたときではなく、クラスが定義されたときに評価されるため、すべてのコンポーネントに同じ配列のインスタンスを使用します。

これを修正するには、コンポーネントの初期化時に配列をインスタンス化します。

App.MyThingsComponent = Ember.Component.extend({
  things: null,
  setupThings: function(){
    this.set("things", []);
  }.on("init")
}):

これで、コンポーネントインスタンスごとに新しい配列インスタンスが取得され、期待どおりに動作するはずです。

hth

どうもありがとう! それで、これは意図された振る舞いですか? たとえば、文字列でこのように機能しないのはなぜですか?

@Geokoumpaこれは、Javascriptのプロトタイプの継承によるものです。 これは、Javascriptのその側面について学ぶのに役立つ@wycatsからの徹底的なブログ投稿です。

http://yehudakatz.com/2011/08/12/understanding-prototypes-in-javascript/

このページは役に立ちましたか?
0 / 5 - 0 評価