[英]Ember.js - Model inside component
我正在制作一个仅用于练习的应用程序,我对组件的功能“didReceiveAttr”有疑问。 当我在我的模板中传递我的MODEL然后我擦除其中的一些元素时,该函数不起作用,但如果我在模板中传递“model.length”然后擦除某些功能工作!
我的组件模板
<h1>Tasks ({{totalTask}})</h1>
我的组件JS
totalTask: null,
didReceiveAttrs(){
this._super(...arguments);
this.set('totalTask', this.get('model.length'));
console.log(this.get('model'));
}
我的主要模板
{{task-list model=model}}
要么
{{task-list model=model.length}}
{{task-list modelLength=model.length}}
在这里,您将model.length
指定为modelLength
属性到组件。 所以最初didReceiveAttrs会组件接收被称为modelLength
属性,当你添加更多的元素,然后模型modelLength
属性本身更改,因此这将调用didReceiveAttrs
前重新呈现。
{{task-list modelTaskList=model}}
这里modelTaskList指向数组,所以当你通过KVO兼容方法(如pushObject)添加/删除项时,它也会反映在组件中。 但是modelTaskList仍然指向同一个数组,因此不会调用didReceiveAttrs钩子。 假设您分配了不同的数组,那么您可以看到调用didReceiveAttrs。
您始终可以将其设置为计算属性,以确保在更新绑定变量时更新。
在组件中,设置一个计算属性,该属性将监视模型的更改,然后使用更改更新变量modelLength
modelLength: Ember.computed('model', function(){
return this.get('model').length;
}
然后,在您的车把模板中,引用此长度
<h1>Tasks{{#if modelLength}} ({{modelLength}}){{/if}}</h1>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.