Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 交换路线';s模型_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 交换路线';s模型

Javascript 交换路线';s模型,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我有一个应用程序,在应用程序模板的页面顶部显示一个购物车。然后,在应用程序路径中,我定义了模型,大致如下: App.ApplicationRoute = Em.Route.extend model: (-> @store.find('cart', @session.get('cart_id') ).observes('session.cart_id') 当用户登录时,我想用从服务器加载的购物车替换该购物车。最好的方法是什么 我说到这里,cart被加载到Ember数据存储

我有一个应用程序,在应用程序模板的页面顶部显示一个购物车。然后,在应用程序路径中,我定义了模型,大致如下:

App.ApplicationRoute = Em.Route.extend
  model: (-> 
    @store.find('cart', @session.get('cart_id')
  ).observes('session.cart_id')
当用户登录时,我想用从服务器加载的购物车替换该购物车。最好的方法是什么


我说到这里,cart被加载到Ember数据存储中,observer块被执行,但是模板没有用新模型更新。或者,也许,我应该为此使用完全不同的方法?

路由器在连接当前路由的模型时调用模型挂钩。如果要更改控制器上的模型,只需抓取控制器并将
model
属性设置为新模型

假设会话存在于应用程序路由中

App.ApplicationRoute = Em.Route.extend
  updateModel: (-> 
    @store.find('cart', @session.get('cart_id')).then (record) => 
      @controller.set('model', record)
  ).observes('session.cart_id')
(我混合并匹配了咖啡脚本,我只从stackoverflow问题中知道它,如果它是错的,那么很抱歉)


示例:

我不太确定,但您可以尝试在
beforeModel
hook中观察这一点。原因是
model
hook已经在
ApplicationController
中设置了
content
属性,这就是模板无法找到正确模型的原因
beforeModel
可以让您在
model
之前查看正确的
cart\u id
hook返回承诺。我认为你应该使用
beforeModel
获取
cart\u id
然后在
model
钩子中使用它来获取正确的模型。太棒了!如果您不介意的话,我对coffeescript语法进行了一些编辑(胖箭头(
=>
)转换为
\u this=this;function(…){u this.controller.set(…)}
)。