【问题标题】:Model records ordering in Spine.jsSpine.js 中的模型记录排序
【发布时间】:2011-11-02 09:30:21
【问题描述】:

正如我在 Spine.js 源代码中看到的那样,Model.each() 函数按照 ID 的顺序返回模型的记录。这在排序很重要的场景中是完全不可靠的:长人员列表等。

您能否建议一种方法来保持原始记录的顺序(与通过 refresh() 或类似函数到达时的顺序相同)?

附: 情况更糟,因为默认情况下 Spine.js 在内部使用新的 GUID 作为 ID。所以记录顺序是完全随机的,这是不可接受的。

编辑: 似乎在最后一次提交中https://github.com/maccman/spine/commit/116b722dd8ea9912b9906db6b70da7948c16948a
他们让这成为可能,但我自己没有测试过,因为我从 Spine 切换到了 Knockout。

【问题讨论】:

标签: model-view-controller javascript-framework spine.js


【解决方案1】:

在学习 spin.js 时遇到了同样的问题。我使用的是纯 JS,所以我忽略了联系示例http://spinejs.com/docs/example_contacts,它对此有所帮助。事实上,您不能真正通过这种方式保持服务器的排序,但您可以使用 javascript 进行自己的排序。

请注意,我在这里使用了 元素模式。 (http://spinejs.com/docs/controller_patterns)

首先,您设置要在模型内部进行排序的函数:

/*Extending the Student Model*/
Student.extend({

    nameSort: function(a,b) {
        if ((a.name || a.email) > (b.name || b.email)) 
            return 1; 
        else 
            return -1
    }
});

然后,在学生控制器中使用排序设置元素:

/*Controller that manages the students*/
var Students = Spine.Controller.sub({

           /*code ommited for simplicity*/

            addOne: function(student){
            var item = new StudentItem({item: student});
            this.append(item.render());
    },

    addAll: function(){
            var sortedByName = Student.all().sort(Student.nameSort);
            var _self = this;
            $.each(sortedByName, function(){_self.addOne(this)});
    },


});   

就是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多