0

これがrequire.config.shim(main.js内)にあるものです:

'jquery.tabs':{
    deps:['jquery'],
    exports: '$'
},

そして、ここに私のモジュールの関連部分があります:

define(['jquery','underscore','backbone','tools','jquery.tabs'], function($,_,Backbone,Tools){

    //SNIP 

    myView = Backbone.View.extend({                
        //SNIP
        render:     function(){
            //SNIP
            var el = tmp.find(".tabholder")
            console.log(el); // not empty
            console.log($.fn.createTabHolder); //not empty

            el.createTabHolder(); //TypeError: el.createTabHolder is not a function
            //el.createPopup();  //different plugin, same error here
            //el.hide();         // this works just fine
            //SNIP
        },
        //SNIP

    });
    //SNIP
}); 

Chrome を使用している場合や localhost から実行している場合は問題なく動作しますが、Firefox (22.0) を使用してサーバーから実行すると「TypeError: el.createTabHolder は関数ではありません」というメッセージが表示されます。

念のため、プラグイン コードを次に示します。requirejs の使用に切り替える前は、問題なく動作していました。

(function (jQuery){
    jQuery.fn.createTabHolder = function (){
        this.html("");
        var tbar = $("<div/>",{
            class:"tabbar padfix noselect"
        });

        tbar.appendTo(this);

        var tholder = $("<div/>",{
            class:"tabcontainer"
        });

        tholder.appendTo(this);


    };

    jQuery.fn.addTab = function(title,data,index, constructor,model,obj){
        var self=this;
        var ts = $("<span/>",{
            class:"tabselector",
            html:title,

        });

        var tab = $("<div/>",{
            class:"tabselector_tab"

        });
        if(data.jQuery)
            tab.append(data);
        else
            tab.html(data);
        tab.appendTo(this.find(".tabcontainer"));
        if(constructor)
            ts.one("click",{element:tab,model:model,obj:obj},constructor);

        ts.on("click",function(){
            self.find(".selectedtab").removeClass("selectedtab");
            tab.addClass("selectedtab");
            self.find(".activetabselector").removeClass("activetabselector");
            ts.addClass("activetabselector");
        });
        if(this.find(".activetabselector").length==0)
            ts.trigger("click");

        ts.appendTo(this.find(".tabbar"));
    }


    return jQuery;
})(jQuery);

何が起こっているのかわからず、それ以外に何も提供できません。

4

2 に答える 2

1

たぶん、そこにはさまざまなバージョンのjqueryがあります。これを試して:

define(['jquery'], function (jQuery){
    jQuery.fn.createTabHolder = function (){

        // ...

    };

});

これの代わりに:

(function (jQuery){
    jQuery.fn.createTabHolder = function (){

        // ...

    };

})(jQuery);
于 2013-08-07T08:59:58.710 に答える
0

交換済み

var el = tmp.find(".tabholder");

これとともに:

var el = $(tmp.find(".tabholder"));

今はうまくいっているようですが、なぜだかわかりませんが、奇妙なタイミングの問題などを修正した可能性があります。試行錯誤です。

于 2013-08-07T10:10:57.590 に答える