XML-файл вызова коллекции Backbone.js с использованием this.fetch ОШИБКА

myBook = Backbone.Collection.extend({
    initialize: function(models, geturl) {
        var self = this;
        this.url = geturl;
        this.fetch({
            dataType: "xml",
            async: false,
            success: function(collection, xml) {
                ...
                ...
                ...
            }
        });
    }
});

Я не могу заставить это работать. Кто-нибудь, пожалуйста, посоветуйте мне решить эту проблему. Мне действительно нужно вызвать XML из коллекции. Я попытался использовать $.ajax(), но потерпел неудачу, поэтому я пытаюсь использовать функцию backbone.js для получения XML, но, к сожалению, я не могу заставить ее работать.

Я использую: - Backbone.js 0.9.2 и jQuery v1.8.3

Спасибо.


person user1915397    schedule 04.03.2013    source источник


Ответы (1)


Backbone ожидает ответ сервера в формате JSON. Вы должны заменить Model.parse функцией, которая анализирует XML и возвращает простой объект Javascript. jQuery.parseXML очень удобен для сопоставления простого XML с объектом.

Предполагая, что ваш XML-ответ будет выглядеть так:

<root>
  <id>1</id>
  <foo bar="foobar">foo</foo>
</root>

И вы хотели, чтобы свойства модели выглядели так:

{
  id:1,
  foo:'foo',
  foobar:'foobar'
}

Вы можете разобрать его следующим образом:

var YourModel = Backbone.Model.extend({
  parse: function(xml) {
    var $xml = $.parseXML(xml);
    return {
      id:      parseInt($xml.find('id').text(), 10),
      foo:     $xml.find('foo').text(),
      foobar:  $xml.find('foo').attr('bar')
    }
  }  
});
person jevakallio    schedule 04.03.2013