0

私はEmber.jsを使用してXMPPクライアントに取り組んでいます。私のデータはXMPPから来ているので、私は自分のモデルを作成したいと思っていまし

セットアップは非常に簡単です。Ember.Object を拡張し、オブジェクトを作成または返す find 関数を実装するだけです。

App.Conversation = Ember.Object.extend({
    messages: [],
    talkingPartner: null,

    init: function(){
        this._super();

        console.log("Init called for App.Conversation");

        //Binding for XMPP client event
        $.subscribe('message.client.im', _.bind(this._onMessage, this));
    },

    //Private Callbacks
    _onMessage: function(event, message){

        console.log("Received message");

        this.find(message.jid).messages.pushObject(message);
    }
});

App.Conversation = Ember.Object.reopenClass({

    store: {},

    find: function(id){
        if(!this.store[id]){
            this.store[id] = App.Conversation.create();
        }
        return this.store[id];
    }
});

これは、大まかにhereのコードに従います。正常に動作しますが、init呼び出されることはありません。使用しないでオブジェクトを作成すると、find機能します。だから私は少し混乱しています。

  • 私の知る限り、storeのすべてのインスタンスで同じでなければなりません App.Conversation。あれは正しいですか?また、それが本当なら、 に移動messagestalkingPartnerinit経由 this.set('message')で設定する必要がありますね。
  • ìnitで が呼び出されたときにApp.Conversateion.create()が呼び出されないのはなぜですかApp.Conversation.find(id)。誰でも理由を説明できますか?Ember.js は、最初に予想したものとは少し異なる動作をすることがあります。
4

1 に答える 1

1

これを変更する必要があります:

App.Conversation = Ember.Object.reopenClass({

これに:

App.Conversation.reopenClass({

コードは Ember.Object 自体を再度開いており、 の定義を完全に上書きしていますApp.Conversation

これは、コードに基づいた動作中の jsFiddleです。

于 2013-04-08T13:51:14.503 に答える