#javascript #backbone.js
#javascript #backbone.js
Вопрос:
Я надеюсь, что смогу абстрагировать все соответствующие части. Мой вопрос в том, почему метод рендеринга не выполняется, когда я извлекаю свою модель с сервера.
Модель
var Document = Backbone.Model.extend({
urlRoot: "/dms/reconcile/GetDocumentByDocumentId/"
});
Вид
window.DocumentView = Backbone.View.extend({
el: $("#reconcile_document"),
initialize: function () {
this.model.bind('refresh', this.render) //also tried reset
},
render: function () {
alert("Do awesome stuff here");
return this;
}
});
Маршрут
var AppRouter = Backbone.Router.extend({
routes: {
"package/:id": "getPackage"
},
getPackage: function (packageid, p) {
window._document = new Document({ id:packageid) });
window.document = new DocumentView({ model: _document });
_document.fetch();
}
});
// Instantiate the router
var app_router = new AppRouter;
Поэтому, когда я захожу localhost:3000/#/Package/123
, я вижу, что вызов xhr localhost:3000/dms/reconcile/GetDocumentByDocumentId/123
и данные возвращаются успешно, но render
функция никогда не выполняется. Любая помощь была бы весьма признательна.
Приветствия.
Ответ №1:
Вызов fetch()
модели не вызовет refresh
событие. Он запускает change
событие путем вызова set
после получения данных:
http://documentcloud.github.com/backbone/docs/backbone.html#section-40
и
http://documentcloud.github.com/backbone/#Model-fetch
Измените свой обработчик событий, и он должен работать:
window.DocumentView = Backbone.View.extend({
el: $("#reconcile_document"),
initialize: function () {
this.model.bind('change', this.render, this);
},
render: function () {
alert("Do awesome stuff here");
return this;
}
});
Комментарии:
1. Или вы можете вызвать _document . выборка ({успех: _document.success_handler}). И в success_handler вы можете запустить пользовательское событие в своей модели.
2. Я ценю это, Дерик, я полностью упустил это из виду в документе. Но, оказывается, мне также нужно было задать ответ для модели в методе parse в модели документа. Спасибо за вашу помощь.