所以我正在使用 Ember.js 开发 XMPP 客户端。由于我的数据来自 XMPP,我想创建自己的模型并找到了这个不错的教程:http ://eviltrout.com/2013/03/23/ember-without-data.html和小示例应用程序emberreddit。
设置应该非常简单。我只是扩展 Ember.Object 并实现一个创建或返回对象的查找函数:
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];
}
});
这大致遵循此处的代码。它工作正常,但从init
未被调用。如果我创建不使用find
它的对象,它会起作用。所以我有点困惑。
- 据我所知
store
,所有App.Conversation
. 那是对的吗?另外,如果这是真的,我必须通过 移动和messages
设置它们 ,不是吗?talkingPartner
init
this.set('message')
- 为什么在
ìnit
调用时不App.Conversateion.create()
调用App.Conversation.find(id)
。谁能解释为什么?我发现 Ember.js 的行为有时与最初预期的有些不同。