Ember.js 当使用find时,不会对对象调用init
因此,我正在使用Ember.js开发一个XMPP客户机。因为我的数据来自XMPP,所以我想创建自己的模型,并找到了这个不错的教程:以及这个小示例应用程序 设置应该非常简单。我只是扩展了Ember.Object并实现了一个find函数,该函数创建或返回对象:Ember.js 当使用find时,不会对对象调用init,ember.js,Ember.js,因此,我正在使用Ember.js开发一个XMPP客户机。因为我的数据来自XMPP,所以我想创建自己的模型,并找到了这个不错的教程:以及这个小示例应用程序 设置应该非常简单。我只是扩展了Ember.Object并实现了一个find函数,该函数创建或返回对象: App.Conversation = Ember.Object.extend({ messages: [], talkingPartner: null, init: function(){ this.
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
和消息
移动到通话伙伴
并通过init
,不需要我this.set('message')
- 为什么在
中调用App.Conversation.find(id)
时不调用App.Conversation.create()
。有人能解释为什么吗?我发现Ember.js有时的行为与最初的预期略有不同
App.Conversation = Ember.Object.reopenClass({
为此:
App.Conversation.reopenClass({
您的代码正在重新打开Ember.Object本身,并且将完全覆盖App.Conversation
的定义
这是一个基于您的代码的示例。非常感谢!我想这对我来说太明显了。