簡體   English   中英

Ember動態更新模板(數組項)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM