Javascript 视图未重新招标,不确定原因

Javascript 视图未重新招标,不确定原因,javascript,backbone.js,Javascript,Backbone.js,我有一个记录当前分数的ScoreView,但是当模型属性更改时,我很难让它重新渲染。 以下是视图的外观: var ScoreView = Backbone.View.extend({ initialize: function() { _.bindAll(this, 'render'); this.model.bind("change", function() { if (this.hasChanged("score")) {

我有一个记录当前分数的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”是模型,但我希望上下文是视图。如何修复此问题?

我认为问题在于您在绑定内部的匿名函数中使用了“this”。你或许应该试试这个:

  var self = this;
  this.model.bind("change", function() {
    if (this.hasChanged("score")) {
      alert("score has changed");
      self.render;
    }
  });

if语句中的“this”仍然引用外部函数中的this.model。因此,this.render()仍被视为未定义。在主干网0.5.x
.bind()
中,接受上下文作为第三个参数,因此
将引用视图如果使用0.3.x版本,则可以执行以下操作:
此.model.bind(“更改”,uu.bind(函数(模型){…},this))
this.model.bind("change", function(model) {
    if (model.hasChanged("score")) {
      alert("score has changed");
      this.render();
    }
}, this);