私は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 は、最初に予想したものとは少し異なる動作をすることがあります。