2014-10-03 33 views
1

我有兩個車型設置是這樣的:Emberjs - 延遲加載的hasMany關係

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


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

和路線是這樣的:

App.ConversationsRoute = Em.Route.extend({ 
    model: function() { 
     return this.store.find('conversation'); 
    } 
}); 


App.ConversationRoute = Em.Route.extend({ 
    model: function(params) { 
     return this.store.find('conversation', params.id); 
    } 
}) 

而一個會話控制器這樣的:

App.ConversationController = Em.ObjectController.extend({ 
    actions: { 
     loadMore: function() { 

     } 
    }, 
    entries: function() { 
     return this.get('entry'); 
    }.property('model.entry') 
}); 

現在,我想要做的只是提供10 條目 sideloaded與每個對話。這可以毫無問題地工作,並且我可以檢索所有與Entry有hasMany關係的對話。

但是,如果用戶在我的應用程序中單擊某個按鈕,我想稍後通過我的loadMore操作中的某些功能延遲加載更多相關條目。

這是如何實現的?我實在無法圍繞如何加載更多條目並將它們同步到「對話」模型。

謝謝您的幫助。

回答

1

通過查詢手動獲取10條記錄,然後使用pushObjects將它們推送到條目集合中。

var entryCol = this.get('entry'); 
store.find('entry', {skip:10}).then(function (col){ 
    entryCol.pushObjects(col); 
}); 

像這樣的東西(抱歉電話)

+0

謝謝。通過閱讀DS.Model來源,得到了幾乎相同的結果。很高興得到證實,但它是做到這一點的正確方法! – fischer 2014-10-03 21:57:07