Ember Computed属性和Handlebars模板
Ember Computed properties and Handlebars templates
在我的Ember控制器中,我有两个计算属性(CP),如下所示;
itemsWithData: function() {
var dataItems = [];
return dataItems;
}.property('containsFailure'),
someArray: function() {
var items = this.get('itemsWithData');
var someArray = [];
return someArray;
}.property('itemsWithData')
现在,在我的Ember Handlerbars模板中,虽然我只使用someArray CP来迭代和显示值,但我没有使用其他CP(即itemsWithData)
但是,如果我在模板中没有引用itemsWithData,那么在我的控制器中也不会执行相同的操作(所以即使是someArray也不会执行,因为它依赖于itemsWithData)
只有当我如下所示明确添加一个伪引用时,它才会执行;
{{#each itemsWithData as |data|}}
{{/each}}
CP在控制器/模板中就是这样工作的吗?我需要一种方法,这样我就不必在我的模板中添加这个伪代码。
由于您正在观察一个数组,它应该是property('itemsWithData.[]')
。'[]'
观察数组中对象集的任何变化(即添加和删除对象),但如果这些对象上的属性发生变化,则不会触发。请参阅此处的文档。
如果您想观察数组中每个元素的特定属性,它将是property('itemsWithData.@each.name')
,它观察itemsWithData
中每个元素名称的集合。如果添加或删除某个元素,它也会触发。请参阅此处的文档。
属性是延迟计算的(而观察者不是),因此将itemsWithData
添加到模板中会强制计算itemsWithData
。如果没有在其他地方调用它,则不会对其进行计算。
还要注意,Ember会覆盖本机数组。因此,如果将Ember.EXTEND_PROTOTYPES
或Ember.EXTEND_PROTOTYPES.Array
设置为false
,则观察阵列可能不起作用。
相关文章:
- 用于在Backbone中创建列表的Handlebars模板
- HandleBars-模板中的模板
- Handlebars模板未出现
- metalsmith系列'路径'无法从Handlebars模板访问键
- Handlebars模板未填充上下文
- helpers字符串中的Handlebars模板标记
- Handlebars模板:将多个数组中的值打印到一个表中
- 如何在编译后将事件侦听器添加到Handlebars模板中
- 如何在Handlebars模板中使用metalsmith永久链接
- 如何为Handlebars模板设置默认参数
- 在Handlebars模板中执行Javascript
- 使用RequireJS预编译的Handlebars模板
- 对所有页面使用相同的Handlebars模板
- Handlebars模板,使用字符串键访问上下文变量
- Handlebars模板工作不正常
- Handlebars模板管理
- 骨干事件不'无法在Handlebars模板中工作
- 如何在Handlebars模板中初始化jQuery小部件
- Ember Computed属性和Handlebars模板
- Handlebars模板占位符的默认值