我有一个ScoreView可以跟踪当前的分数,但是当模型属性发生变化时,我无法重新渲染它。 这是视图的样子:
var ScoreView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render');
this.model.bind("change", function() {
if (this.hasChanged("score")) {
alert("score has changed");
this.render;
}
});
},
render: function() {
alert("drawing new score");
return this.model.get("score");
},
});
分数更改时,视图不会重新渲染。当得分发生变化时,我确实得到警报,“得分已经改变”。当我打印出“this.render”的内容时,控制台说该功能未定义。我认为代码认为这个上下文中的“this”是模型,但我希望上下文是视图。我该如何解决这个问题?
答案 0 :(得分:0)
我认为问题在于你在bind中的匿名函数中使用'this'。你应该试试这个:
var self = this;
this.model.bind("change", function() {
if (this.hasChanged("score")) {
alert("score has changed");
self.render;
}
});
答案 1 :(得分:0)
this.model.bind("change", function(model) {
if (model.hasChanged("score")) {
alert("score has changed");
this.render();
}
}, this);