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
и определить, нуждается ли он в дополнительной обработке или нет. Если нет, просто верните ответ. Если так, делайте свою работу, а затем возвращайте "фиксированный" ответ.