gpt4 book ai didi

javascript - 按 ember.js objectController 中的属性排序

转载 作者:行者123 更新时间:2023-12-02 18:25:38 26 4
gpt4 key购买 nike

我有一个测验 View ,我想按问题 ord 属性对其进行排序。如果测验的唯一属性是问题,这会很简单,但我有一个如下所示的模型结构:

测验模型

App.Quiz = DS.Model.extend({
'badge': DS.belongsTo('App.Badge'),
'passingScore': DS.attr('number'),
'allowed': DS.attr('number'),
'questions': DS.hasMany('App.Question')
})

问题模型

App.Question = DS.Model.extend({
'quiz': DS.belongsTo('App.Quiz'),
'text': DS.attr('string'),
'ord': DS.attr('number'),
'answers': DS.hasMany('App.Answer')
})

因此创建的 Controller 是一个对象 Controller ,而不是数组 Controller 。关于如何按该属性排序有什么想法吗?

最佳答案

好吧,Ember 有 Ember.ArrayProxy 和 Ember.SortableMixin,所以,你可以这样做:

var sortedElements = Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
content: yourElements.toArray(),
sortProperties: ['propertyYouWantToSortBy'],
sortAscending: false
});

还有很多其他选项,你可以看看https://github.com/emberjs/ember.js/blob/master/packages/ember-runtime/lib/mixins/sortable.js在那里,您可以找到可以覆盖的 orderBy 函数:

orderBy: function(item1, item2) {
var result = 0,
sortProperties = get(this, 'sortProperties'),
sortAscending = get(this, 'sortAscending'),
sortFunction = get(this, 'sortFunction');

Ember.assert("you need to define `sortProperties`", !!sortProperties);

forEach(sortProperties, function(propertyName) {
if (result === 0) {
result = sortFunction(get(item1, propertyName), get(item2, propertyName));
if ((result !== 0) && !sortAscending) {
result = (-1) * result;
}
}
});

return result;

}

您甚至可以删除断言,并且不设置 sorProperties,并将其更改为如下所示:

orderBy: function(item1, item2) {
var result = 0,
sortAscending = get(this, 'sortAscending'),
sortFunction = get(this, 'sortFunction');

// implement your sort logic here, I don't know how you want to sort it
result = sortFunction(get(item1, propertyName), get(item2, propertyName));


return result;

}

关于javascript - 按 ember.js objectController 中的属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com