将记录推送到本地商店并更新模板

时间:2016-03-08 19:57:08

标签: ember.js

我使用this.store.push从应用程序控制器将记录推送到商店(此操作是从应用程序控制器中初始化的套接字服务调用的),使用ember {{1我正在实现这个

2.2.1

这会将此新项目添加到商店中,但模板未更新以显示新项目,我也尝试添加此类内容

var newStoreRecord = this.store.push({ data: { id: id, type: 'cart', attributes: newCartItem } }); 假设我在控制器的顶部有this.get('cart.model').pushObject(newStoreRecord);之类的东西,可能还有错误。

在购物车路线中,我的模型被定义为

cart: Ember.inject.controller(),

我不确定是否因为我没有使用模型挂钩而无法更新模板? (顺便说一句,我们没有使用模型钩子,因为Android上的性能不好我们宁愿用加载器加载一个空模板,然后加载数据而不是反过来。

1 个答案:

答案 0 :(得分:1)

我有几点想法:

要具体回答您的问题,当您从商店设置变量时,就像您正在做的那样,它只会引用当时商店中中的内容。它不会自动更新。

最好的办法是向控制器添加两个新的计算属性:

items: Ember.computed(function() {
  return this.store.peekAll('cart');
}),

// You'll need to flesh this one out further
filteredItems: Ember.computed('items.@each.auction_id', function() {
  return this.get('items').filter(...);
})

在模板中引用filteredItems,它应该有效。

旁注,我强烈建议重构一些事情。

  • 我会使用setupController挂钩代替didTransition。它在模型钩子完成后运行,因此类似于你正在寻找的东西
  • 您可以在路线中随时access the params,因此您无需将其保存在模型挂钩中
  • 如果您没有执行任何异步数据,则无需在模型挂钩中返回promise。只需返回对象。您甚至可能需要这样做。

希望这会有所帮助。