0

コードを検討してください(JSFiddle にもあります):

// Backbone calls this "view3"
InnerView = Backbone.View.extend({

    initialize: function() {
        this.parent = this.options.parent;
        this.listenTo(
            this.model,
            "change:name",
            function() { this.parent.onNameChange() }
        );
    }


});

// Backbone calls this "view2"
OuterView = Backbone.View.extend({
    initialize: function() {
        this.innerView = new InnerView({
            model: this.model,
            parent: this
        });
    },

    onNameChange: function() {
        console.log("'this' is bound to the outerview instance: " + (this.cid === "view2"));
    }
});


var myModel = new Backbone.Model({ name: "foo" });
var outerView = new OuterView({ model: myModel });

// trigger onNameChange
myModel.set("name", "bar");

これ'this' is bound to the outerview instance: trueはコンソールに出力されます。ただし、コールバックを次のように変更すると:

this.listenTo(
    this.model,
    "change:name",
    this.parent.onNameChange
);

(これはこのフィドルで実行しました)、コンソールに が表示されます'this' is bound to the outerview instance: false。代わりthisにインスタンスにバインドされているようです。InnerView

どうしてこれなの?listenTo ドキュメントを読んだ後、は内部で呼び出されるthisため、常にInnerViewインスタンスにバインドされると予想されます。listenToInnerView

4

2 に答える 2