Как обработать пользовательский ответ в модели Backbone - PullRequest
6 голосов
/ 30 января 2012

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

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

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

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

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

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

К вашему сведению: магистраль получает ответ от сервера, я вижу его под ключом responseText.

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

1 Ответ

13 голосов
/ 30 января 2012

Backbone поддерживает это. Я столкнулся с той же проблемой, когда использует данные с 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, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...