Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干收集和视图排序_Backbone.js_Coffeescript - Fatal编程技术网

Backbone.js 主干收集和视图排序

Backbone.js 主干收集和视图排序,backbone.js,coffeescript,Backbone.js,Coffeescript,我在集合中设置了“comparator”方法,以便对集合中的列表进行排序。 但这并不影响你的看法 “/api/note/getList”,它返回(当视图初始化集合时调用) 这是我的收藏 define [ 'models/Note' ], (Note) -> class NoteCollection extends Backbone.Collection model : Note url : '/api/note/getList'

我在集合中设置了“comparator”方法,以便对集合中的列表进行排序。 但这并不影响你的看法

“/api/note/getList”,它返回(当视图初始化集合时调用)

这是我的收藏

define [
    'models/Note'
],
(Note) ->
    class NoteCollection extends Backbone.Collection

        model : Note
        url : '/api/note/getList'

        initialize: () =>
            _.bindAll @
            @.on 'sort', @onSort

        comparator : (item) ->
            id = item.get 'id'
            return id * -1

        onSort: () =>
            @.each (model) =>
                console.log model.get 'id'
onSort方法打印

11
22
33
正确,但在视图中,它显示

22
11
33
这是我的看法,

define [    
    'hbs!./noteCollection_tpl'
    './noteItemView'
    'collections/NoteCollection'
],
(noteCollection_tpl, noteItemView, NoteCollection) ->
    class NoteCollectionView extends Backbone.Marionette.CompositeView
        template : noteCollection_tpl
        itemView : noteItemView
        itemViewContainer : '.noteListContainer'
        className : 'noteWrap'

        initialize : (options) ->
            @collection = new NoteCollection() 
我必须重新渲染视图吗?如果是这样的话,当加载url并将所有列表放入集合后,如何捕获(what)事件


请告知我做错了什么。

需要在对集合进行排序时进行渲染

initialize : (options) ->
    @collection = new NoteCollection()
    @collection.on 'sort', () =>
        @render()
哦,最好使用“listenTo”,因为

当视图被销毁时,listenTo调用将自动删除事件处理程序。这可以防止内存泄漏和僵尸事件侦听器。

我相信,使用木偶将解决这个僵尸事件侦听器


谢谢张宇瑞。

是的,在对收藏进行排序后,您必须重新提交视图。抱歉,我不擅长coffeescript,但在视图的初始化中,您可以:this.collection.on('sort reset',this.render,this));这捕获了当集合被“重置”(例如,在fetch()完成之后)以及当集合被排序时的事件。我明白了。非常感谢。(顺便说一句,挂接该事件是一项烦人的工作。)是的,默认情况下,主干在视图中没有数据绑定。顺便说一句,如果您使用的是backbonejs>1.0。使用listenTo更好。例如,在集合的初始化中:this.listenTo(this.collection,“sort reset”,this.render);顺便说一句,
\uu.bindAll@
无法使用较新版本的下划线,您必须立即指定方法名称()。@mu太短了,是的,谢谢!
initialize : (options) ->
    @collection = new NoteCollection()
    @collection.on 'sort', () =>
        @render()