![](/img/trans.png)
[英]In Ember how do I update a view after the ArrayController content is modified?
[英]Ember view doesn't update after ArrayController is sorted
我有一个Ember数组控制器绑定到Ember选择视图,如果用户选择,它将被用户排序。 一旦所有内容都通过我的排序,我使用现在排序的数组重置数组,视图不会改变,但如果我遍历我刚设置的数组,它会显示它已排序。 因此,我相信视图不会使用阵列控制器进行更新。 我正在查看其他类似问题的帖子,但是没有一个解决方案适合我。
dmp: Ember.ArrayController.create(),
tempArray: new Array(),
sort: function() {
debugger;
var self = this;
var textA, textB, i, t, pos, temp;
this.set('tempArray', self.dmp.get('content'));
var nxt;
for(t = 0; t < (self.get('tempArray').length) - 1; t++) {
nxt = this.get('tempArray')[t];
for(i = t; i < self.get('tempArray').length; i++) {
if(self.get('tempArray')[i].name.toUpperCase() <= nxt.name.toUpperCase()) {
nxt = self.get('tempArray')[i];
pos = i;
}
}
temp = self.get('tempArray')[t];
self.get('tempArray')[t] = nxt;
self.get('tempArray')[pos] = temp;
}
//App.defRouteSearch.dmpName.set('content', self.get('tempArray'));
//App.defRouteSearch.dmp.set('content', self.get('tempArray'));
self.setArray();
},
setArray: function() {
debugger;
var a = 0, b = 1;
var self = this;
while(a < this.get('tempArray').length) {
self.get('dmp').toArray[b] = self.get('tempArray')[a];
a++;
b++;
}
}
我将所有内容切换到普通的js数组,因为与数组控制器相比,操作数据的速度更快,在填充我拥有的其他6个数组时,我会在其余的代码中执行此操作,这样就不会造成任何问题。 注释代码是我在设置数组之前所做的。 谢谢你的帮助。
不需要做所有这些。 这应该做的伎俩:
App.MyArrayController = Ember.ArrayController.create({
content: songs,
sortProperties: ['name'],
sortAscending: true
});
一段时间后我能够让它上班。 现在这是我的排序
sortName: function() {
var self = this;
var i, t, pos, temp;
this.set('tempArray', new Array());
this.set('tempArray', self.dmp.get('content'));
var nxt;
for(t = 0; t < (self.get('tempArray').length) - 1; t++) {
nxt = this.get('tempArray')[t];
for(i = t; i < self.get('tempArray').length; i++) {
if(self.get('tempArray')[i].name.toUpperCase() <= nxt.name.toUpperCase()) {
nxt = self.get('tempArray')[i];
pos = i;
}
}
temp = self.get('tempArray')[t];
self.get('tempArray')[t] = nxt;
self.get('tempArray')[pos] = temp;
}
self.dmp.set('content', self.tempArray.clone());
},
Array.prototype.clone = function () {
var newObj = [];
for (i in this) {
if (this[i]) {
if ($.isPlainObject(this[i])) {
newObj[i] = $.extend(true, {}, this[i]);
}
else if ($.isArray(this[i])) {
this[i].clone();
}
else {
newObj[i] = this[i];
}
}
}
return newObj;
};
我不完全确定它为什么会起作用但确实如此。 我能想到的一点点推理是,在js中复制数组时,它只被引用而不是实际复制。 但是,由于引用的数组被修改,我最后不需要clone()。 如果我错了,请随意纠正我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.