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;
    }
});

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

Спасибо!

1 ответ

Решение

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

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

Тем не менее, сама коллекция имеет parse метод, который вызывается.

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

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

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