如何在不使用阵列控制器的情况下在Ember模型中实现排序?

Abh*_*L R 11 ember.js ember-data ember-cli

每个google结果都与ArrayController排序有关.需要一个排序机制而不使用ArrayController.

有一个模型,其中有排序参数.就像说'sortOrder'作为模型中的一个属性(它将来自后端).

将使用#each渲染此模型,但这应该基于sortOrder属性而不是模型的ID属性进行迭代.

mp3*_*415 31

在Ember 2.0 SortableMixin中已被弃用,并且即将推出.

Controller(不是ArrayController)你可以定义一个新的计算属性,如下SortedUsers1,2,3所示:

export default Ember.Controller.extend({
    sortProps: ['lastName'],
    sortedUsers1: Ember.computed.sort('model', 'sortProps'),
    sortedUsers2: Ember.computed.sort('content', 'sortProps'),
    sortedUsers3: Ember.computed('content', function(){
        return this.get('content').sortBy('lastName');
    })
});
Run Code Online (Sandbox Code Playgroud)

上面的假设是模型本身是具有lastName用户属性之一的用户数组.依赖'model''content'看起来等同于我.上面的所有三个计算属性都生成相同的排序列表.

请注意,您不能'sortProps''lastName'in 替换参数sortedUsers1,2- 它将无法工作.

要更改排序顺序,请修改sortProps

sortProps: ['lastName:desc']
Run Code Online (Sandbox Code Playgroud)

此外,如果您的模板位于users/index文件夹中,那么您的控制器也必须在那里.即使路由加载模型在users /中,用户/中的控制器也不会这样做.

在模板中,使用情况与预期一致:

    <ul>
        {{#each sortedUsers1 as |user|}}
            <li>{{user.lastName}}</li>
        {{/each}}
    </ul>
Run Code Online (Sandbox Code Playgroud)

  • 我正好在同一条船上,学习这些东西并左右撞墙.Ember 2.0弃用了很多东西,但通常不清楚要使用什么(除非你密切关注我们大多数人没有遵循的Ember开发). (2认同)
  • 我前一段时间放弃了Ember,因为我不喜欢系统的复杂性随着时间的推移而增长,因此无济于事。希望社区中有人可以回答。也许只是提一个新问题以便尽快被发现会更容易。抱歉。 (2认同)

Tor*_*ups 6

这是我如何手动排序(使用ember比较)

import Ember from "ember";
import { attr, Model } from "ember-cli-simple-store/model";

var compare = Ember.compare, get = Ember.get;

var Foo = Model.extend({
    orderedThings: function() {
        var things = this.get("things");
        return things.toArray().sort(function(a, b) {
            return compare(get(a, "something"), get(b, "something"));
        });
    }.property("things.@each.something")
});
Run Code Online (Sandbox Code Playgroud)