Javascript Ember store.push与hasMany不兼容';更新模板?
假设以下模型:Javascript Ember store.push与hasMany不兼容';更新模板?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,假设以下模型: 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
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')
)
路线会话\u route.js.coffee:
App.SessionRoute = Ember.Route.extend(
model: (params) ->
this.store.find('session', params.id)
)
以及以下会话.hbs模板:
{{#each session_users}}
{{state}}
{{/each}}
我已连接到WebSocket流,当创建新的SessionUser时,我会收到通知。这里会话\u 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)
使用Ember Inspector(Chrome扩展),我可以看到会话用户已被推送,并且存在于具有正确关系的存储中,但模板未更新。当使用store.createRecord时,模板实际上正在更新,但我想使用push/pushPayload,以便使用现有的序列化程序。我很确定这是一个已知的错误。我们对websocket执行类似的操作:在推送负载以创建记录之后,我们手动调用
addObject
将其添加到hasMany关系中,例如
var comment = store.push('comment', payload);
post.get('comments').addObject(comment);
您的路由看起来似乎只查找单个会话,但您正在数组上迭代。n/m,我看到您的会话用户是会话下的一个变量。如果在推送之后立即调用find,它是否加载了它?find函数将返回推送的会话用户,但模板仍然相同,为什么只有createRecord会影响模板?如果在用户和会话的有效负载中只使用ID,这是相同的吗?