2016-01-22 3 views
0

В моем приложении у меня есть коллекция Магистраль, которая выглядит следующим образом:Поиск коллекции в позвоночнике

App.Collections.SurveyReportSets = Backbone.Collection.extend({ 
    url: '/survey_report_sets', 
    model: App.Models.SurveyReportSet, 

    byReportType: function(report_type) { 
    return this.where({report_type: report_type}); 
    }, 

    byReportOrganizationType: function(report_organization_type) { 
    return this.where({report_organization_type: report_organization_type}); 
    } 
}); 

Это ищет работает отлично, когда я использую только один из них. Но когда я пытаюсь использовать оба, они не работают. Вот как я использую его:

var my_collection = this.collection.byReportType(this.model.get('report_type')).byReportOrganizationType(this.model.get('report_organization_type')) 

Backbone возвращает мне следующую ошибку:

TypeError: this.collection.byReportType(...).byReportOrganizationType is not a function 

Что я делаю не так?

ответ

0

Я обновил метод сбора возвращается, и она работает правильно:

App.Collections.SurveyReportSets = Backbone.Collection.extend({ 
    url: '/survey_report_sets', 
    model: App.Models.SurveyReportSet, 

    byReportType: function(report_type) { 
    return new App.Collections.SurveyReportSets(this.where({report_type: report_type})); 
    }, 

    byReportOrganizationType: function(report_organization_type) { 
    return new App.Collections.SurveyReportSets(this.where({report_organization_type: report_organization_type})); 
    } 
}); 
+1

Я не предлагаю это делать. Это вызывает конструктор коллекций и делает процессор больше работы, чем необходимо, только для стиля кодирования. –

+0

Хм, так как я могу решить эту проблему по-другому? –

+1

Просто попросите методы принять необязательный параметр (массив моделей). вызовите первый метод, передайте результаты в следующий метод. Если необязательный параметр не передан, пусть фильтр фильтрует сам набор ... вы можете использовать '_.where' в результирующем массиве моделей –

1

возможно byReportOrganizationType не работает, потому что byReportType возвращает модели, удовлетворяющие условию (тип отчета), но он делает nto return Backbone.Collection, но массив моделей. Этот массив, очевидно, не имеет byReportOrganizationType функции, определенную

+0

Так как будет лучшим способом исправить это в позвоночнике? –

+1

sry Я пропустил ваш вопрос, но при этом вам удалось это сделать. :) – djaszczurowski