1

確かに、私は javascript、jquery、または oop をほとんど知りませんが、物事をつなぎ合わせ、時にはそれらを機能させるには十分な知識があります。しかし、これは私の頭の中にあり、グーグルで調べても、何が起こっているのか頭も尻尾もわかりません。これは私のコードの要点です:

jQuery(document).ready(function($) {

    var methods = {
        init : function( options ) { 
            if (somthing) {
                this.latlng(input);//  <--- ERROR: Object has no method
            }
        },
        auto : function( ) {
            if (something) {
                this.latlng(input);
            } else {
                this.location(input);
            }
        },
        location : function ( input ) {
            // draw map
        },
        latlng : function ( input, l ) {
            // draw map
        }
    }

    $.fn.codeAddress = function( method ) {
        // Method calling logic
        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 );
        } else {
            $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
        }  
    };

    var geo = new $(document).codeAddress(); // Initialize the object   
});

テンプレートとしてjQuery Docs Plugin/Authoringに依存し、そこから段階的に作業を開始しました。理想的には、ドキュメントの準備ができたときに init() を独自にロードしますが、ロードしないので、オブジェクトを初期化するために最後から 2 行目を追加しました。

マップは、最初にメソッド latlng() を使用して init() で作成され、描画されます。ここで、6 行目の this.latlng(input) Uncaught TypeError: Object [object Object] has no method 'latlng' というエラーが発生します。その後、onclick イベントハンドラが auto() を呼び出して、受け取った入力に応じてマップを再描画します。

私の説明やコードがジャンクショーである場合は、お詫び申し上げます。学びながら頑張っています。

4

3 に答える 3

0

次のように言う必要があります。

methods['latlng'].apply(this);

その理由は、の値がthisプラグインではないためです。実際にはthis、より多くの洞察を得るために値をコンソールに記録する必要がありますが、効果的には、メソッドと呼ばれるプラグイン内のオブジェクトを宣言しました。latlng はそのオブジェクトのコンテキストにあります。それを呼び出すには、そのキー (latlng) で参照し、.apply() メソッドを呼び出します。

于 2013-04-16T22:04:51.583 に答える
0
return methods.init.apply( methods, arguments );
于 2013-04-16T22:06:24.453 に答える
0

jQuery プラグインのコードでthisは、その時点で繰り返される DOM 要素をラップする jQuery オブジェクトへの参照です。

あなたの場合、手動でプラグインを にアタッチしましたdocument
(プラグイン ファイル内ではなく、サイトのコード内でこれを行う必要があります)。

いずれにせよ、呼び出す代わりにthis.latlng()、プラグインを で参照できますthis.codeAddress( 'latlng' );

これは jQuery プラグインの意図した機能であり、この方法でプラグインにアクセスすると、物事がクリーンに保たれます。

于 2013-04-16T22:09:52.407 に答える