Backbone.js: привязка массива коллекции к функции

У меня есть массив коллекций (coll_array). Все коллекции привязаны к одной и той же функции (process_coll) для всех событий. Это означает, что любое изменение любой коллекции в массиве приводит к выполнению одной и той же функции. Моя проблема заключается в том, как определить коллекцию, в которой произошло событие. Если бы я мог передавать аргументы целевой функции, я мог бы передать идентификатор коллекции, но, насколько мне известно, в событиях Backbone это сделать невозможно.

initialize: function(){
    _(this).bindAll('process_coll');
    coll_array ; //array of collections 
    for(var i=0;i<coll_array.length;i++)
        coll_array[i].bind('all', this.process_coll);
        coll_array[i].fetch();
}

process_coll: function(){
    //some code here 
    //how do I get the specific collection which resulted in execution of this function?
}

person shreyj    schedule 18.02.2013    source источник
comment
_(this).bindAll('process_coll') не выглядит элегантно. Может быть, вам нужен другой дизайн? См. backbonejs.org/#Events-trigger. Вы можете передавать аргументы при запуске событий.   -  person Pramod    schedule 18.02.2013
comment
Коллекция будет передана обработчику в списке аргументов. Конечно, порядок аргументов зависит от события, поэтому вы можете либо привязываться к отдельным событиям по отдельности (как отмечает Пол ниже), либо попытаться разобрать arguments, чтобы найти коллекцию.   -  person mu is too short    schedule 18.02.2013


Ответы (1)


Вероятно, вам лучше слушать конкретные события.

initialize: function(){
    coll_array ; //array of collections 
    for(var i=0;i<coll_array.length;i++)
        coll_array[i].bind('reset', this.reset_coll);
        coll_array[i].bind('add', this.add_coll);
        coll_array[i].bind('remove', this.remove_coll);
        coll_array[i].fetch();
}

reset_coll: function(collection, options){
    // collection argument is the one you want
}
add_coll: function(model, collection, options){
    // collection argument is the one you want
}

remove_coll: function(model, collection, options){
    // collection argument is the one you want
}
person Paul Hoenecke    schedule 18.02.2013