В Backbone Relational как заставить замолчать добавить:* события в fetch()

Когда я загружаю в свою модель, используя .fetch() backbone Backbone Relational запускает add:survey_question для каждого добавляемого вопроса (это то же самое, что происходит, если что-то загрузить на мой survey_questions коллекция через.add(). Что еще хуже, добавить:survey_questions не уважать comparator в моих коллекциях survey_questions.

Я хотел бы, чтобы способ заставить замолчать добавление:survey_questions, которые случаются

Вывод Console.log при прослушивании всех событий в модели съемки (SurveyBuilder) и модели вопросов (встроенных в модель SurveyQuestion)

//START of .fetch() on the Survey Model
SurveyBuilder 
["relational:change:survey_questions", child, Array[3], Object]
 app.js:25338
SurveyBuilder 
["add:survey_questions", child, child, Object]
 app.js:25338
Question 
["add:survey_question", child, Backbone.Collection, Object]
 app.js:25575
SurveyBuilder 
["add:survey_questions", child, child, Object]
 app.js:25338
Question 
["add:survey_question", child, Backbone.Collection, Object]
 app.js:25575
SurveyBuilder 
["add:survey_questions", child, child, Object]
 app.js:25338
Question 
["add:survey_question", child, Backbone.Collection, Object]
 app.js:25575
SurveyBuilder 
["sync", child, Object, Object]
 app.js:25338

//START OF Manual .add()
SurveyBuilder 
["add:survey_questions", child, child, Object]
 app.js:25338
SurveyQuestion 
["change:question_number", child, 4, undefined]
 app.js:25578
SurveyQuestion 
["change", child, undefined]
 app.js:25578

А вот и мои модели:

m.Question = m.BaseModel.extend({
    urlRoot: '/api/questions',

    initialize: function(){
        if(this['type']) {
            this.set('type', this['type']);
        } else if(this.get('type')) {
            this.type = this.get('type');
        }

        m.BaseModel.prototype.initialize.apply(this, arguments);
    },

    defaults: {
        question_text: '',
        question_number: 1,
        comment_field: true
    },
    calculateProperties: function(){
        return {
            'question_id': this.getID()
        };
    },
    subModelTypes: {
        'Numeric': 'APP.Models.NumericQuestion',
        'MultipleChoice': 'APP.Models.MultipleChoiceQuestion',
        'Checkboxes': 'APP.Models.CheckboxesQuestion',
        'FreeText': 'APP.Models.FreeTextQuestion',
        'TimePeriod': 'APP.Models.TimePeriodQuestions',
        'Sorting': 'APP.Models.SortingQuestion',
        'Grading': 'APP.Models.GradingQuestion',
        'Slider': 'APP.Models.SliderQuestion',
        'AgreeDisagree': 'APP.Models.AgreeDisagreeQuestion',
        'YesNo': 'APP.Models.YesNoQuestion'
    }
});

m.SurveyQuestion = m.BaseModel.extend({
    defaults: {
        'question_number': 1
    },
    relations: [{
        type: Backbone.HasOne,
        key: 'question',
        relatedModel: 'APP.Models.Question',
        includeInJSON: '_id',
        reverseRelation: {
            type: Backbone.HasMany,
            key: 'survey_question',
            includeInJSON: false
        }
    }]
});

m.Survey = m.BaseModel.extend({
    urlRoot: '/api/surveys',
    defaults: {
        start_date: moment().format('YYYY-MM-DD'),
        end_date: moment().add('weeks', 3).format('YYYY-MM-DD'),
        title: moment().format('MMMM') + ' Economist Survey'
    },
    relations: [{
        type: Backbone.HasMany,
        key: 'survey_questions',
        relatedModel: 'APP.Models.SurveyQuestion',
        collectionType: 'APP.Collections.SurveyQuestions',
        includeInJSON: true,
        reverseRelation: {
            key: 'survey',
            includeInJSON: true
        }
    }]
});

0 ответов

Другие вопросы по тегам