方法重写不正常

时间:2013-03-12 09:01:14

标签: javascript backbone.js

我正在尝试使用以下代码动态重写该方法。

"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 个答案:

答案 0 :(得分:1)

问题是您的事件处理程序已绑定到render函数的原始版本。替换this.render引用并不会改变这一事实。

Derick Bailey撰写了blog post来描述问题。