2014-10-01 61 views
1

在EmberJS我有我的模式定義爲這樣:Emberjs - 試圖從控制器的訪問模式:返回undefined

App.Conversation = DS.Model.extend({ 
    body   : DS.attr('string'), 
    created_at  : DS.attr('date'), 
    entry   : DS.hasMany('Entry') 
}); 

App.Entry = DS.Model.extend({ 
    body : DS.attr(), 
    conversation: DS.belongsTo('Conversation'), 
    created_at : DS.attr('date'),  
}); 

和我對話控制器是這樣的:

App.ConversationsController = Em.ArrayController.extend({  
    actions: { 
     event: function() {  
      var entry = this.store.createRecord('entry', { 
       body: 'test test' 
      }); 

      this.store.find('conversation', 102498).get('entry').createRecord(entry); 
     }, 
    } 
}); 

不過,我得到一個「 Uncaught TypeError:當我嘗試保存新的Entry模型時,無法讀取未定義的屬性'createRecord'。

ID爲102498的談話確實存在,因爲它是返回,如果我設法得到它像這樣:

this.store.find('conversation', 102498) 

出了什麼問題?預先感謝您的幫助。

回答

2

由於store.find()方法返回承諾,所以當您對其調用get('entry')時,它尚未解決。

試試這個所以它首先解決的承諾,然後調用get('entry')

this.store.find('conversation', 102498).then(function(conversation){ 
conversation.get('entry').createRecord(entry); 
}); 

這應該工作,希望它幫助。

+0

謝謝。那正是我需要的 - 太棒了! :-) – fischer 2014-10-02 14:02:09