2011-08-17 47 views
0

我有一个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
this.model.bind("change", function(model) { 
    if (model.hasChanged("score")) { 
     alert("score has changed"); 
     this.render(); 
    } 
}, this); 
+0

“此”中的if语句仍然是指从外部功能this.model。所以,this.render()仍然被视为未定义。 – egidra

+0

骨干0.5.x'.bind()'接受上下文作为第三个参数,所以'this'将参考视图 –

+0

如果你使用0.3.x版本,你可以这样做:'this.model.bind(“change”,_ .bind(function(model){...},this))' –

0

我相信问题在于你在绑定内部的匿名函数中使用'this'。你也许应该试试这个:

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

使用'self'是坏榜样 –

相关问题