Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 - Fatal编程技术网

Backbone.js 按名称和类别对主干集合进行排序

Backbone.js 按名称和类别对主干集合进行排序,backbone.js,Backbone.js,我有一个主干系列和两个按钮。我想做的是,如果我单击按钮1,它应该按名称对集合排序,如果单击按钮2,它应该按类别排序 我试过这个 comparator : function(model){ return model.get("Name"); } 我的问题是我的收藏中能有两个比较器吗?如何分别按名称和类别对集合进行排序。有什么想法吗?感谢您可以将排序变量附加到集合,并在比较器中使用该变量: App.List = Backbone.Collection.extend({

我有一个主干系列和两个按钮。我想做的是,如果我单击按钮1,它应该按名称对集合排序,如果单击按钮2,它应该按类别排序

我试过这个

comparator : function(model){
     return model.get("Name");
}

我的问题是我的收藏中能有两个比较器吗?如何分别按名称和类别对集合进行排序。有什么想法吗?感谢您可以将排序变量附加到集合,并在比较器中使用该变量:

    App.List = Backbone.Collection.extend({
      initialize: function() {
        this.sortVar = 'Name';
      },
      comparator: function(model){
        return model.get(this.sortVar);
      }
    })

然后,单击链接时只需更改sortVar并调用sort()。

您可以将排序变量附加到集合中,并在比较器中使用该变量:

    App.List = Backbone.Collection.extend({
      initialize: function() {
        this.sortVar = 'Name';
      },
      comparator: function(model){
        return model.get(this.sortVar);
      }
    })

然后,单击链接时只需更改sortVar并调用sort()。

另一种方法是使用sortBy方法(它来自下划线,但可用于Backbone.Collection):使用该方法,您只需传入模型属性名。请注意,sortBy方法返回一个数组

这里我有一个按钮的独立视图。触发排序事件可使其他视图(例如,处理列表呈现的视图)响应排序事件并重新呈现它们自己

app.ButtonsView = Backbone.View.extend({

        el: '#buttons',

        events: {
            'click #sortByNameBtn' : 'sortByName',
            'click #sortByCategoryBtn' : 'sortByCategory'
        },

        sortByName : function(){
            app.mycollection.models = app.mycollection.sortBy('name');  
            app.mycollection.trigger('sort');                                                       
        }, 

        sortByCategory : function(){                    
            app.mycollection.models = app.mycollection.sortBy('category');  
            app.mycollection.trigger('sort');                                                                       
        }
    });
参考:(搜索sortBy)

使用sortBy不会触发“sort”事件,这就是我自己在集合中触发它的原因。
另外,sortBy可能不适用于日期属性或其他复杂的排序,因此使用comparator进行排序。

另一种方法是使用sortBy方法(它来自下划线,但可用于主干.Collection):使用该方法,只需传入模型属性名称即可。请注意,sortBy方法返回一个数组

这里我有一个按钮的独立视图。触发排序事件可使其他视图(例如,处理列表呈现的视图)响应排序事件并重新呈现它们自己

app.ButtonsView = Backbone.View.extend({

        el: '#buttons',

        events: {
            'click #sortByNameBtn' : 'sortByName',
            'click #sortByCategoryBtn' : 'sortByCategory'
        },

        sortByName : function(){
            app.mycollection.models = app.mycollection.sortBy('name');  
            app.mycollection.trigger('sort');                                                       
        }, 

        sortByCategory : function(){                    
            app.mycollection.models = app.mycollection.sortBy('category');  
            app.mycollection.trigger('sort');                                                                       
        }
    });
参考:(搜索sortBy)

使用sortBy不会触发“sort”事件,这就是我自己在集合中触发它的原因。 此外,sortBy可能不适用于日期属性或其他复杂的排序,因此请使用comparator进行排序