我正在尝试使用以下代码动态重写该方法。
"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
任何人都可以解释究竟发生了什么吗?
答案 0 :(得分:1)
问题是您的事件处理程序已绑定到render函数的原始版本。替换this.render引用并不会改变这一事实。
Derick Bailey撰写了blog post来描述问题。