2013-11-01 38 views
2

假設下面型號Ember store.push with hasMany不更新模板?

App.User = DS.Model.extend(
    email: DS.attr('string') 
    session_users: DS.hasMany('sessionUser') 
) 

App.SessionUser = DS.Model.extend(
    user: DS.belongsTo('user') 
    state: DS.attr('string') 
    session: DS.belongsTo('session') 
) 

App.Session = DS.Model.extend(
    title: DS.attr('string') 
    session_users: DS.hasMany('sessionUser') 
) 

路線session_route.js.coffee

App.SessionRoute = Ember.Route.extend(
    model: (params) -> 
    this.store.find('session', params.id) 
) 

而下面session.hbs模板:

{{#each session_users}} 
    {{state}} 
{{/each}} 

我連接編輯一個WebSocket流,當一個新的SessionUser被創建時,我會收到通知。
這裏sessions_controller.js.coffee測試推一些有效載荷:

payload = 
    id: 20 
    user: controller.store.getById('user', 2) 
    session: controller.store.getById('session', 2) 
    state: 'confirmed' 
    controller.store.push('sessionUser', payload) 

使用灰燼督察(Chrome擴展程序),我可以看到會話的用戶被推倒,並存在與正確的關係商店,但該模板未被更新。
當使用store.createRecord模板實際上得到更新,但我想使用push/pushPayload,以便我可以使用現有的序列化器。

+0

您的路線看起來像只找到一個會話,但您正在迭代數組。 – Kingpin2k

+0

n/m,我看到你的session_users是會話下的一個變量。 – Kingpin2k

+0

如果您在推送後立即呼叫查找,它是否會加載? – Kingpin2k

回答

5

我很確定這是一個已知的錯誤。我們使用websocket做類似的事情:在我們推動有效載荷創建記錄之後,我們手動調用addObject將其添加到hasMany關係中,例如

var comment = store.push('comment', payload); 
post.get('comments').addObject(comment);