来自路由的 EmberJS 模型在控制器中返回未定义

阿拉法特·拜格

有人可以帮助我解决以下疑问吗?

我正在使用 EmberJS 3.4 版本,我的路线看起来像

export default Route.extend({
model(){
    const items = [{price: 10}, {price: 15}]
    return items
 },
});

和一个为模型返回未定义的控制器

export default Controller.extend({

    init(){
        console.log(this.model); //returns undefined
        console.log(this); //has the model object as a property
    },
  })

看到这个包含输出的图像

出于某种原因,this.model 返回 undefined 但是当我记录“this”时,它具有模型对象作为列出的属性。

我的问题是,当我在计算属性中访问模型时,为什么该属性不是 undefined ?

导出默认 Controller.extend({

subtotal: computed('this.model', function(){
     return  this.model.reduce((acc, item) => {
         return acc + item.price
     },0) // return 25
    }),
 })
NullVoxPopuli

控制器是单例的,因此您无法访问init.

当我在计算属性中访问模型时,为什么该属性不是未定义的?

在计算属性中访问(以及在更现代的 ember 中,本机 getter)是对属性进行响应式访问的唯一方法model这种“反应性”使您的所有数据保持同步——在 ember 3.4 中,计算的回调在依赖关系也得到解决之前不会被调用)。

更多信息

  • 关于控制器:https ://guides.emberjs.com/release/routing/controllers/#toc_where-and-when-to-use-controllers (当前文档(撰写本文时为 4.3))
  • 关于计算属性:https ://guides.emberjs.com/v3.4.0/object-model/computed-properties/#toc_computed-properties-only-recompute-when-they-are-consumed (来自 3.4 的文档)

出于某种原因,this.model 返回 undefined 但是当我记录“this”时,它具有模型对象作为列出的属性。

发生这种情况是因为您记录了一个object,并且控制台中的对象没有复制到控制台,而是渲染了引用,所以如果您不够快,数据将在您查看时全部解析/解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章