0

次のパターンを使用して jquery プラグインを作成しています ($("#element").myPlugin() を実行したくないため、特定の要素に対しては何もしていません..とにかく..

$.extend({
    myPlugin: function(){
        //some cool stuff
    }
});

しかし、他のプラグインがプラグインの動作を変更する方法も必要です。次のことを試してみたところ、奇妙なエラーが発生しました...

$.extend({
    myPluginStyles: {
        someStuff: {},
        moreStuff: {},
    }
});

$.extend({
    myPlugin: function(options) {
        this.style = $.myPluginStyles[options.style]; //options.style will contain either "someStuff" or "moreStuf"
    }
})

現在、他のプラグインは myPluginStyles オブジェクトに新しい「スタイル」を追加できます..少なくともそれがアイデアです:

$.myPluginStyles.newStyle = {};

$.myPlugin({style: 'newStyle'}); を実行できるようになりました。

しかし、次のエラーが発生します。

Uncaught TypeError: Property 'style' of object function (e,t){return new v.fn.init(e,t,n)} is not a function 

前もって感謝します。

4

2 に答える 2

1

$.extend のスタイルは、このパターン $(element).yourFunction を使用する新しいプラグイン用です。

したがって、プラグインを作成する必要はなく、jQuery に関数を追加するだけです。だからあなたがする必要があるのは:

$.myPlugin=function () {alert('yourfunction') };
$.myPluginSeries={someStuff:'', someStuff2: ''};

私がはっきりしていることを願っています。

于 2013-01-09T12:27:44.743 に答える
1

おそらくこれはあなたが探しているものですか?このように、プラグインには「スタイル」というオブジェクトがあり、(registerStyles を使用して) 登録したり、(this.styles[name] を使用して) 使用したりできます。

$.fn.extend({
    myPlugin: {
        styles : {}, //define the style object
        registerStyles : function(name, style) {
            //register name and style in the plugin's styles object
            this.styles[name] = style;
        },
        doStuff: function(name){
            //test by alerting the first value in the styles object
            alert(this.styles[name])
        }
    }
});

使用法:

$.fn.myPlugin.registerStyles('myStyle', 'test'); //set style

$('#my_element').myPlugin.doStuff('myStyle'); //do stuff (in this case echo-ing the style)

// or $.fn.myPlugin.doStuff('myStyle'); if you your function is not designed to use an element

これがベストプラクティスかどうかはわかりませんが、それが私のやり方です。

デモについては、このフィドルを参照してください

于 2013-01-09T12:43:58.480 に答える