您必须在 Ember 中手动对数组进行排序,包括任何数组控制器的内容。你总是可以content
用你的排序数组替换而不是保留两个数组。
更新
这是我认为您正在寻找的示例:http: //jsfiddle.net/ud3323/yjs8D/
更新#2
更新了此示例以使用新的视图上下文更改。https://gist.github.com/2494968
车把
<script type="text/x-handlebars" >
Will Display and Sort by Age (after 2 sec)<br/><br/>
{{#each App.userController}}
{{#view App.RecordView}}
{{name}} - {{age}}
{{/view}}
{{/each}}
</script>
JavaScript
App = Ember.Application.create({
ready: function() {
Ember.run.later(this, function() {
Ember.run.later(this, function() {
App.get('userController').set('content', [
Ember.Object.create({ name:"Jeff", age:24 }),
Ember.Object.create({ name:"Sue", age:32 }),
Ember.Object.create({ name:"Jim", age:12 })
]);
}, 2000);
Ember.run.later(this, function() {
// Make the controller's content sort again in reverse this time
App.userController.notifyPropertyChange('content');
}, 4000);
}
});
App.userController = Ember.ArrayController.create({
content: [],
contentDidChange: Ember.observer(function(userCtr, prop) {
if(!Ember.empty(this.get('content'))) {
console.log('about to begin sort');
this.sortContent();
}
this._super();
}, 'content'),
sort:"desc",
sortContent:function() {
var content = this.get("content"), sortedContent;
if (this.get("sort") == "desc") {
this.set("sort", "asc");
sortedContent = content.sort( function(a,b){
return a.get("age") - b.get("age");
});
} else {
this.set("sort","desc");
sortedContent = content.sort( function(a,b){
return b.get("age") - a.get("age");
});
}
this.set("content",sortedContent);
}
});
App.RecordView = Ember.View.extend({});
</p>