[英]Ember dynamically update template (array item)
我正在使用Ember版本2,並具有以下組件模板;
{{#each info as |item|}}
<span class="value">{{item.value}}</span>
<span class="label">{{t item.label}}</span>
{{/each}}
現在,我想向其動態寫入值(即假設它是一個動態總計,最初為0,並根據用戶對某些行的選擇自動更新)
我的問題是以下代碼有效嗎?
var info = self.get('gridParas.info');
info.popObject();
info.pushObject({
label: 'MyTotalField',
value: total
});
self.set('gridParas.info', info);
這行不通;
var info = self.get('gridParas.info');
info.label = "MyTotalField";
info.value = total;
self.set('gridParas.info', info);
popObject(),pushObject()是否正確? 第二種方法有什么問題? 我想避免彈出,每次按下。
set()
方法通知模型屬性已更改,從而觸發模板更新。 您可以在更新標簽和值(應更新模板notifyPropertyChange('info.label')
后調用notifyPropertyChange('info')
或notifyPropertyChange('info.label')
來代替使用它。 可以在以下文檔中找到更多信息:
http://emberjs.com/api/classes/Ember.Observable.html#method_notifyPropertyChange
您可以直接在最后一個元素上設置屬性,而無需彈出和推送:
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
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.