有人能帮我解决以下疑问吗?
我使用的是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
}),
})
1条答案
按热度按时间6mzjoqzu1#
控制器是单例的,因此无法访问
init
中的模型。当我访问计算属性中的模型时,为什么属性没有未定义?
访问计算属性(在更现代的ember中是本地getter)是被动访问
model
属性的唯一方法。这种“React性”使您的所有数据保持同步——在ember 3.4中,在解决依赖关系之前,不会调用computed的回调)。更多信息
出于某种原因,这一点。模型返回未定义的值,但当我记录“this”时,它将模型对象作为列出的属性。
这是因为您记录了一个
object
,并且控制台中的对象没有“复制”到控制台,引用被呈现,所以如果您的速度不够快,数据将在您查看时全部被解析/结算。