テストアプリで次のコードを機能させることができません:
this.propertyWillChange('tableContent');
this.get('tableContent').sort(function (a, b) {
var nameA = a.artikel_name,
nameB = b.artikel_name;
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
return 0 //default return value (no sorting)
});
this.propertyDidChange('tableContent');
データはソートされますが、dom は更新されません。
テンプレートは次のようになります。
<tbody>
{{#each NewApp.router.gridController.tableContent}}
{{#view NewApp.TableRow rowBinding="this"}}
<td style="width: 100px">{{view.row.product_no}}</td>
<td align="right" style="width: 100px">{{view.row.price}}</td>
<td>{{view.row.artikel_name}}</td>
{{/view}}
{{/each}}
</tbody>
短い jsfiddle スニペットでこの問題を再現しようとしました。しかし、そこで機能します。唯一の違いは、ajax 呼び出し (および追加のルーター設定) を使用してデータをフェッチすることです。
selectionChanged: function () {
var that = this;
if (this.selection) {
$.getJSON("api/v1/lists/" + this.selection.id + "/prices", function (content) {
that.set('tableContent', content);
});
}
}.observes('selection')
配列をコピーして、コピーした配列を再割り当てすると、同じコードが機能します。