0

プラグインからメソッド内のサブメソッドにアクセスするにはどうすればよいですか? たとえば、メソッド内initのメソッドにアクセスしたいのですが、pagemanage

$this.cms(manage.page); // ReferenceError: manage is not defined

基本構造、

(function($){

    var methods = {

        defaults: function(options) {

            // Default options.
            var defaults = {
                setup: {
                    directory: ""
                }           
            }

            // Always leave this line here.
            var options = $.extend(defaults, options);

            // Return the processed options.
            return options;

        },

        init : function( options ) {

            // Must declare a this as the plugin's root itself.
            var $this = this;

            // Call the local method from the plugin itself to get the processed options.
            var o = $this.cms('defaults',options);
            //alert("nothing to load");


            $this.cms(manage.page);
        },

        manage : {

            page: function(options){

                // Must declare a this as the plugin's root itself.
                var $this = this;

                // Call the local method from the plugin itself to get the processed options.
                var o = $this.cms('defaults',options);

                alert("page method");

            },
            menu: function(options){
            }

        },

        add : function( options ) {

        },

        erase : function( options ) { 

        },

        remove: function(object,options) { // to be developed.

        }
    };

    $.fn.cms = function( method ) {

        // @reference: http://docs.jquery.com/Plugins/Authoring#Namespacing
        if ( methods[method] ) {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );  // always change 'init' to something else if you different method name.
        } else {
            $.error( 'Method ' +  method + ' does not exist on jQuery.cms' );
        }

        return this; // this is needed to ensure chainability @reference: http://stackoverflow.com/questions/14008121/jquery-namespace-how-to-pass-default-options-from-one-method-to-the-subsequence

    };

})(jQuery);

それは可能ですか、それとも他のより良い方法ですか?親メソッドの中に子メソッドを入れたいだけです。

4

2 に答える 2

0

私がそれを正しく行っているかどうかはわかりませんが、ここに私の解決策があります...

(function($){

    var methods = {

        defaults: function(options) {

            // Default options.
            var defaults = {
                setup: {
                    directory: ""
                }           
            }

            // Always leave this line here.
            var options = $.extend(defaults, options);

            // Return the processed options.
            return options;

        },

        init : function( options ) {

            // Must declare a this as the plugin's root itself.
            var $this = this;

            // Call the local method from the plugin itself to get the processed options.
            var o = $this.cms('defaults',options);
            //alert("nothing to load");


            $this.cms("manage").page();
        },

       manage : function(options){

            // Must declare a this as the plugin's root itself.
            var $this = this;

            // Call the local method from the plugin itself to get the processed options.
            var o = $this.cms('defaults',options);

            // Set the list for holding properties.
            var properties = {
                page : function(){ $.fn.page(); }
            }

            // Return the property.
            return properties;

        },

        add : function( options ) {

        },

        erase : function( options ) { 

        },

        remove: function(object,options) { // to be developed.

        }
    };

    $.fn.cms = function( method ) {

        // @reference: http://docs.jquery.com/Plugins/Authoring#Namespacing
        if ( methods[method] ) {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );  // always change 'init' to something else if you different method name.
        } else {
            $.error( 'Method ' +  method + ' does not exist on jQuery.cms' );
        }

        return this; // this is needed to ensure chainability @reference: http://stackoverflow.com/questions/14008121/jquery-namespace-how-to-pass-default-options-from-one-method-to-the-subsequence

    };

})(jQuery);

次に、の別のプラグインpage

// A namepace structure:
(function($){

    var methods = {

        defaults: function(options) {

            // Default options.
            var defaults = {
                setup: {
                    directory: ""
                }           
            }

            // Always leave this line here.
            var options = $.extend(defaults, options);

            // Return the processed options.
            return options;

        },

        init : function( options ) {

            // Must declare a this as the plugin's root itself.
            var $this = this;

            // Call the local method from the plugin itself to get the processed options.
            var o = $this.page('defaults',options);

            alert("a page plugin: list page");
        },

        remove: function(object,options) { // to be developed.

        }
    };

    $.fn.page = function( method ) {

        // @reference: http://docs.jquery.com/Plugins/Authoring#Namespacing
        if ( methods[method] ) {
            return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
        } else if ( typeof method === 'object' || ! method ) {
            return methods.init.apply( this, arguments );  // always change 'init' to something else if you different method name.
        } else {
            $.error( 'Method ' +  method + ' does not exist on jQuery.page' );
        }

        return this; // this is needed to ensure chainability @reference: http://stackoverflow.com/questions/14008121/jquery-namespace-how-to-pass-default-options-from-one-method-to-the-subsequence

    };

})(jQuery);

長くて退屈に思えますが、うまくいきます。

于 2013-07-13T10:22:08.970 に答える
0

manage.pageお持ちのコードではアクセスできません。のプロパティのみを呼び出すことができmethods、それ以上のプロパティは呼び出せません。

オブジェクトを配置page()して、manage「ページ」をプラグインの関数に渡すことができます。

于 2013-07-13T08:34:46.187 に答える