2012-01-30 9 views
5

Я начал интегрировать магистраль в свой проект. Самая первая трудность, с которой я столкнулся, - это ответ от бэкэнда, не был JSON Array или не предназначен для магистрали. Вот пример.Как обрабатывать пользовательский отклик в базовой модели

//A backbone model 
var Person = Backbone.Model.extend({}); 

// A backbone collection 
var PersonCollection = Backbone.Collection.extend({ 
    model : Person, 
    url: '/people' 
}); 

Так что подумайте, что когда я прошу/люди, он не возвращает массив JSON людей. Вместо этого вернуть что-то вроде:

{header: "some str", people: ["person", "array", ".."], stats: "something is here" } 

Проблема с этим является основой не может присвоить этот ответ JSON для моделей. Есть ли какие-либо настройки, которые могут быть выполнены в контроллере при ответе. Поэтому доступ к модели может быть нормальным. Любые до/после крючка.

FYI: позвоночник получает ответ от сервера, я могу видеть его под ключом «responseText».

Любая помощь очень ценится.

ответ

12

Багажник поддерживает это. Я столкнулся с тем же вопросом, когда consuming data from Parse.com. В вашем случае, когда у вас есть /people конечная точка, которая не возвращает массив, вы можете переопределить функцию Collection.parse, чтобы показать Backbone как найти массив, который ищет:

var PersonCollection = Backbone.Collection.extend({ 
    model : Person, 
    url: '/people', 
    parse: function(resp, xhr) { 
    this.header = resp.header; 
    this.stats = resp.stats; 
    return resp.people; 
    } 
}); 

Если вам нужно сделать больше эта функция, то вы должны. Аналогичным образом вы можете переопределить Model.sync, если вам нужно.

+0

Благодарим за быстрый ответ. Но как насчет заголовка и статистики, они будут потеряны. Или я могу назначить их атрибутам уровня контроллера (если что-то вроде этого есть в позвоночнике). – ducktyped

+0

Несомненно. Вы всегда можете хранить это внутри внутри 'parse' как' this.header = resp.header' и 'this.stats = resp.stats'. Я обновил свой ответ, чтобы показать это. –

Смежные вопросы