Мне интересно, есть ли указатели на лучший способ «выборки», а затем привязка коллекции данных к представлению в Backbone.js.Правильный способ привязки результатов операции getbone.js async fetch к представлению
Я заполняю свою коллекцию с помощью операции извлечения асинхронных объектов и при успешной привязке результатов к шаблону для отображения на странице. Поскольку операция выборки async выполняется из основного потока, я теряю ссылку на объект представления магистрали (SectionsView в этом случае). Поскольку это так, я не могу ссылаться на $ el, чтобы добавить результаты. Я вынужден создать еще одну ссылку DOM на странице для ввода результатов. Это работает, но я не доволен тем, что
Я потерял ссылку на мой взгляд, когда выполняется асинхронная выборка, есть ли более чистый способ реализации этого? Я чувствую, что мне что-то не хватает ... Любые указатели будут оценены.
SectionItem = Backbone.Model.extend({ Title: '' });
SectionList = Backbone.Collection.extend({
model: SectionItem,
url: 'http://xxx/api/Sections',
parse: function (response) {
_(response).each(function (dataItem) {
var section = new SectionItem();
section.set('Title', dataItem);
this.push(section);
}, this);
return this.models;
}
});
//Views---
var SectionsView = Backbone.View.extend(
{
tagName : 'ul',
initialize: function() {
_.bindAll(this, 'fetchSuccess');
},
template: _.template($('#sections-template').html()),
render: function() {
var sections = new SectionList();
sections.fetch({ success: function() { this.SectionsView.prototype.fetchSuccess(sections); } }); //<----NOT SURE IF THIS IS THE BEST WAY OF CALLING fetchSuccess?
return this;
},
fetchSuccess: function (sections) {
console.log('sections ' + JSON.stringify(sections));
var data = this.template({
sections: sections.toJSON()
});
console.log(this.$el); //<-- this returns undefined ???
$('#section-links').append(data); //<--reference independent DOM div element to append results
}
}
);
спасибо за подробный ввод Enders:) ... Я собираюсь пропустить ваш совет .... ответит более формально, как только у меня будет возможность просмотреть ваши шаги выше. – darthal
hey Enders Спасибо ответ был действительно полезен, очень ценился. только одна модификация, хотя 'section.fetch ({reset: true});' см. ссылку здесь [ссылка] (http://stackoverflow.com/questions/15959306/backbone-js-fetch-method-does-not-fire- сброс-события). Чтобы ответить на ваш первый вопрос о синтаксическом анализе: сериализованный объект, возвращаемый с сервера, представляет собой простой список строк (например: '[" item1 "," item2 "," item3 "," item4 "," item5 "," item6 "] '), Я хотел отобразить их в определенное свойство на моей модели. это казалось самым чистым способом сделать это. – darthal