0

mColumnsオブジェクト内でパラメーターを使用しようとすると、次のコードに問題があります。最初のコンソール ログは正しく出力されますが、渡されたオブジェクト内のログBackbone.View.extendはそうではなく、undefined が出力されます。

define(["collections/mColumns"],function(mColumns){
        console.log(mColumns);
        return Backbone.View.extend({
                el: "#content",
                events:{
                    'click #addText': "addText"
                },
                initialize: function(mColumns){
                    console.log(mColumns);
                }
            }); 
});

ただし、事前にオブジェクトを作成してから、そのオブジェクトをパラメーターとして渡すと、正常に機能します。両方のコンソール ログが正しく出力されます。

define(["collections/mColumns"],function(mColumns){
    console.log(mColumns);
    var obj = {
        el: "#content",
        events:{
            'click #addText': "addText"
        },
        initialize: function(){
            console.log(mColumns);
        }
    }
    return Backbone.View.extend(obj);
});

どうしてこれなの?

4

1 に答える 1

1

動作中の(2番目の)スニペットと最初のスニペットの違いは、最初のスニペットがmColumns変数をシャドウイングすることです。同じ名前の仮関数パラメーターを定義することにより、元の変数は関数内のコードから見えなくなります。

define(["collections/mColumns"],function(mColumns){  // <-- mColumns (#1)
    ...
    return Backbone.View.extend({
        ...
        initialize: function(mColumns){              // <-- mColumns (#2)
            console.log(mColumns);                   // <-- Refers to #2
        }
    })
});
于 2012-10-01T09:05:08.330 に答える