私は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。あれは正しいですか?また、それが本当なら、 に移動messagesしtalkingPartnerてinit経由this.set('message')で設定する必要がありますね。
- ìnitで が呼び出されたときに- App.Conversateion.create()が呼び出されないのはなぜですか- App.Conversation.find(id)。誰でも理由を説明できますか?Ember.js は、最初に予想したものとは少し異なる動作をすることがあります。