Javascript 余烬动态更新模板(数组项)
我使用的是Ember版本2,我的组件模板如下Javascript 余烬动态更新模板(数组项),javascript,ember.js,Javascript,Ember.js,我使用的是Ember版本2,我的组件模板如下 {{#each info as |item|}} <span class="value">{{item.value}}</span> <span class="label">{{t item.label}}</span> {{/each}} 这是行不通的 var info = self.get('gridParas.info'); info.label = "MyTotalField"
{{#each info as |item|}}
<span class="value">{{item.value}}</span>
<span class="label">{{t item.label}}</span>
{{/each}}
这是行不通的
var info = self.get('gridParas.info');
info.label = "MyTotalField";
info.value = total;
self.set('gridParas.info', info);
popObject()和pushObject()的方式正确吗?第二种方法有什么问题?
我希望避免每次都按pop键。set()方法通知模型某个属性已更改,从而触发模板更新。更新标签和值后,您可以调用notifyPropertyChange('info')
或notifyPropertyChange('info.label')
,而不是使用它,这将更新模板。更多信息可在以下文档中找到:
您可以直接在最后一个元素上设置属性,而无需弹出和按下:
var info = self.get('gridParas.info');
info.getObjectAt(info.get('length') - 1).setProperties({
label: 'MyTotalField',
value: total
});
或者,如果不想重复使用当前的最后一项,请使用replace
:
info.replace(info.get('length') - 1, 1, [{
label: 'MyTotalField',
value: total
}]);
如您所见,您需要传递replace
索引、要替换的项的计数,以及要粘贴在其中的新项的数组
在任何情况下,您都不需要:
self.set('gridParas.info', info);
因为这已经是
gridParas.info
的值了。你可以做self.set('gridParas.info.label',“MyTotalField”)
和self.set('gridParas.info.value',total)
。不确定这是否有效,因为“info”实际上是一个数组只是尝试了一下……虽然它似乎在更新标签/值,但它并没有反映在用户界面上(与执行push/pushObject时一样)如果info是数组,则它应该是info[0]。标签和info[0]。值假设info只有一个元素。这不起作用…给出未捕获的错误:属性集失败:路径“gridParas.info[0]中的对象”找不到或已被销毁。了解notifyPropertyChange
很有用,但只有在特殊情况下才需要它。这会有什么帮助?另外,info
是一个数组。label
属性位于数组的元素上,而不是我所理解的数组本身。也没有引用info.label
所以我怀疑它上面的notifyPropertyChanges
是否有任何作用。
self.set('gridParas.info', info);