2013-03-12 138 views
1

我正在尝试使用以下代码动态地重写该方法。重写方法无法正常工作

"use strict"; 

define(function (require) { 
    var Backbone = require('backbone'); 

    var TestView = Backbone.View.extend({ 

     initialize: function() { 
      var that = this; 
      that.model.on("change", this.render, this); 
     }, 

     render: function() { 
      this.initialRender(); 
      this.$el.html("Work to do everytime"); 

      this.render = function() { 
       this.$el.html("Work to do everytime"); 
      } 
     }, 
     initialRender: function() { 
      console.log("Work to do once only"); 
     } 

    }); 

    var model = new Backbone.Model(); 
    var view = new TestView({ 
     model: model 
    }); 

    view.render(); 
    view.render(); 

    view.model.set("testdata", "data"); 
}); 

我想这样的输出:

Work to do once only 

但我得到这样的输出:

Work to do once only 
Work to do once only 

谁能请解释一下,究竟是怎么回事?

回答

1

问题是您的事件处理函数已经绑定到渲染函数的原始版本。替换this.render参考不会改变这个事实。

Derick Bailey写了一个blog post描述问题。

+0

谢谢..得到了问题。 – 2013-03-12 09:25:35