parse() коллекцию Backbone без вызова модели parse()

Я использую пользовательские методы parse() как для своей базовой коллекции, так и для базовой модели, чтобы обрабатывать всю упаковку, которую мой сервер возвращает вокруг них.

Моя проблема в том, что коллекция вызывает parse() для каждой модели, что не нужно, мне нужно только анализировать модель при выборке из модели вместо коллекции.

Должен ли я каким-то образом изменить выборку или есть другие варианты? Я нашел несколько комментариев о параметре parse = true, но реальной документации по этому поводу нет.

// Base class for all models
module.exports = Backbone.Model.extend({
    parse: function(response) {
        var retrocycled = JSON.retrocycle(JSON.parse(JSON.stringify(response)));
        this.statusResp = retrocycled.status;
        this.messageResp = retrocycled.message;
        return retrocycled.data;
    }
});

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

Спасибо!


person zetsubou    schedule 17.01.2014    source источник


Ответы (1)


Если вы посмотрите на строку 256 исходного кода Backbone, вы увидим, что parse вызывается, если он существует, при создании новой модели.

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

Однако в самой коллекции также есть вызываемый метод parse.

Но вам нужен условный вызов Model#parse в зависимости от контекста. Проблема здесь в том, что когда Модель создается, она не знает, делаете ли вы это как автономную модель или как часть контекста создания коллекции.

Вам придется разработать метод разбора модели для самоанализа response и определить, нуждается ли он в дополнительной обработке или нет. Если нет, просто верните ответ обратно. Если это так, сделайте свою работу, а затем верните «фиксированный» ответ.

person tkone    schedule 17.01.2014
comment
Да, я думал об этом, но я хотел знать, есть ли другой более конкретный подход, чем просто попытка проанализировать ответ, чтобы сделать вывод о контексте, возможно, кто-то предложит другую идею. Все равно спасибо за толковый ответ! - person zetsubou; 17.01.2014
comment
Я согласен с @zetsubou, мне бы понравилось, если бы был лучший способ сделать это. - person Tony Zampogna; 30.07.2015