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

hujrc8aj  于 2022-09-28  发布在  其他
关注(0)|答案(1)|浏览(133)

有人能帮我解决以下疑问吗?
我使用的是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
    },
  })

see this image which contains output
出于某种原因,这一点。模型返回未定义的值,但当我记录“this”时,它将模型对象作为列出的属性。
我的问题是,当我访问计算属性中的模型时,为什么属性没有未定义?
导出默认Controller.extend({

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

6mzjoqzu1#

控制器是单例的,因此无法访问init中的模型。
当我访问计算属性中的模型时,为什么属性没有未定义?
访问计算属性(在更现代的ember中是本地getter)是被动访问model属性的唯一方法。这种“React性”使您的所有数据保持同步——在ember 3.4中,在解决依赖关系之前,不会调用computed的回调)。
更多信息

  • 关于控制器:https://guides.emberjs.com/release/routing/controllers/#toc_where-以及何时使用控制器(当前文档(编写时为4.3))
  • 关于计算属性:https://guides.emberjs.com/v3.4.0/object-model/computed-properties/#toc_computed-属性仅在使用时重新计算(来自3.4的文档)

出于某种原因,这一点。模型返回未定义的值,但当我记录“this”时,它将模型对象作为列出的属性。
这是因为您记录了一个object,并且控制台中的对象没有“复制”到控制台,引用被呈现,所以如果您的速度不够快,数据将在您查看时全部被解析/结算。

相关问题