【问题标题】:Ember store.push with hasMany doesn't update template?带有 hasMany 的 Ember store.push 不更新模板?
【发布时间】:2013-11-01 19:20:45
【问题描述】:

假设以下模型

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)

使用 Ember Inspector(Chrome 扩展程序)我可以看到会话用户已被推送,并且存在于商店中并具有正确的关系,但模板未更新。
使用 store.createRecord 时,模板实际上正在更新,但我想使用 push/pushPayload 以便可以使用现有的序列化程序。

【问题讨论】:

  • 您的路线看起来只找到一个会话,但您正在迭代一个数组。
  • n/m,我看到你的 session_users 是会话下的一个变量。
  • 如果你在推送后立即调用 find 它会加载它吗?
  • find函数返回给我推送的sessionUser,但是模板还是一样,为什么只有createRecord影响模板?
  • 如果你只为用户和会话使用有效载荷中的 id 是一样的吗?

标签: javascript ember.js ember-data


【解决方案1】:

我很确定这是一个已知的错误。我们对 websocket 做类似的事情:在我们推送有效负载以创建记录后,我们手动调用 addObject 将其添加到 hasMany 关系中,例如

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多