не могу получить доступ к модели в backbone.js

у меня есть этот результат от службы отдыха, которая у меня есть: введите описание изображения здесь

введите здесь описание изображения

ПРИМЕЧАНИЕ. Ответ находится в формате JSON, это плагин из Chrome, который отображает его таким образом.

если вы посмотрите на изображение два [тот, что над этим], атрибуты моделей — это Items, тогда каждый элемент находится в разделе Items. Что мне нужно сделать, чтобы получить доступ к item?

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

window.Item = Backbone.Model.extend();

window.ItemCollection = Backbone.Collection.extend({
model: Item,
url: 'http://localhost/InterprisePOS/Product/loaditembycategory/Event Materials'
});

window.ItemListView = Backbone.View.extend({
tagName : 'ul',
initialize: function(){
    this.model.bind("reset",this.render,this);
},
render: function(eventName){
    _.each(this.model.models.Items, function(item){
        $(this.el).append(new ItemListItemView({model:item}).render.el);
    },this);
    return this;
}
 });

 window.ItemListItemView = Backbone.View.extend({
template : _.template($("#item-list").html()),

render: function(eventName){
    $(this.el).html(this.template(this.model.toJSON()));
    return this;
}
 });

 var AppRouter = Backbone.Router.extend({
routes:{
    "":"list"
},
list:function(){
    this.itemList = new ItemCollection();
    this.itemListView = new ItemListView({model:this.itemList});
    this.itemList.fetch();
    $("#itemContainer").html(this.itemListView.render().el);
}
 });

 var app = new AppRouter();
 Backbone.history.start();

ОБНОВИТЬ

Я смог исправить свою проблему с вложенными объектами json. Теперь атрибут «Модели» или «Моя коллекция» заполнен отдельными элементами. Но проблема в том, что он не работает и не отображает мои взгляды.

введите здесь описание изображения

Это код, который я добавил:

parse: function(response) {
return response.Items;
}

ОБНОВИТЬ

Наконец-то я ответил на свой вопрос! Ура! как-то я забыл поставить "()" на рендер в моем ItemListview. а также $("#ItemContainer"), похоже, не работает, поэтому я добрался до $('#ItemContainer), теперь я отображаю детали из своей модели.


person n0minal    schedule 23.03.2012    source источник


Ответы (2)


Я совершенно уверен, что Backbone по умолчанию использует JSON для всех запросов и понятия не имеет, что делать с XML, вам, вероятно, потребуется переопределить метод синхронизации для коллекции, чтобы мы могли использовать XML.

Следующее должно помочь в решении вашей проблемы: http://newcome.wordpress.com/2011/02/20/using-xml-web-services-in-backbone-js-using-jath/

Они используют синтаксический анализатор XML сторонней библиотеки в операции синтаксического анализа синхронизации, которая преобразует модель в JSON, который Backbone может использовать изначально.

person Chris    schedule 23.03.2012
comment
Нет. Ответ в формате JSON. Каким-то образом я добавил плагин в Chrome, который превращает это в то, что вы отображаете на изображении, но я уверен, что ответ в JSON. - person n0minal; 23.03.2012
comment
Вам не нужно переопределять синхронизацию. Вам просто нужно передать параметры для извлечения и сохранения, чтобы иметь дело с XML. Например, с выборкой вы должны сделать что-то вроде этого: this.model.fetch({ contentType : application/json, dataType : xml, processData : false }); Работает как шарм. - person Brendan Delumpa; 13.04.2012

Убедитесь, что ответ возвращается в формате JSON. Backbone по умолчанию работает с данными JSON.

person grigy    schedule 23.03.2012
comment
Он в формате JSON. просто плагин от хрома, который делает это таким. :) - person n0minal; 23.03.2012