我正在尝试Backbone.js应该是一个基本的任务,并且无法让它工作。我只想在我的模型上执行 fetch 操作并让它更新视图。这是我的代码:
(function($) {
var HomeModel = Backbone.Model.extend({
defaults: {
lead: "not logged in",
},
url: 'test.php'
});
var HomeView = Backbone.View.extend({
initialize: function() {
this.model = new HomeModel();
this.model.bind("change", this.render);
this.model.fetch();
},
el: $("#content"),
render: function() {
this.$el.html(this.model.get("lead"));
}
});
var homeView = new HomeView();
})(jQuery);
我可以看到“test.php”成功加载,但 render 函数永远不会被调用。
我错过了什么?
答案 0 :(得分:2)
我想我有正确的答案。您在this
函数中引用render
,但this
的上下文是事件,而不是您的类。因此,您应该使用下划线的bindAll
函数将类绑定到函数的内部。像这样:
var HomeView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render'); // bind 'this' in 'render'
this.model = new HomeModel();
this.model.bind("change", this.render);
this.model.fetch();
},
});
否则this.el不存在,或者至少是错误的,并且安静地失败。
答案 1 :(得分:2)
你是怎么看到“test.php”成功加载的?也许AJAX请求成功,但响应不是有效的JSON?尝试将成功和错误回调添加到fetch调用:this.model.fetch({success: function (resp) { console.log('success: %o', resp) }, error: function (er) { console.log('error: %o', er) });