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

谁能解释一下到底发生了什么?

4

1 回答 1

1

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

Derick Bailey 写了一篇博客文章来描述这个问题。

于 2013-03-12T09:19:15.557 回答