我希望我能抽象出所有相关部分。我的问题是,当我从服务器获取模型时,为什么渲染方法没有执行。
模型
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
函数从未执行。任何帮助将不胜感激。
干杯。
答案 0 :(得分:8)
在模型上调用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;
}
});