-1

こんにちは、サーバーからロードするのではなく、静的 JSON を使用するように既存のプラグインを拡張しています。これは拡張機能の縮小版です。

(function ($) {
    $.fn.MyExtension = function (options) {
        return this.each(function () {
            if (opts.load_Json) {
                $.get("", function (result) {
                    fromJson(opts.load_Json)
                });
            }

            var fromJson = function (json) {
                    // json stuff..
                 }  
        });
});

を削除して、コールバックなしで直接呼び出すと、それが定義されていないというエラーが表示$.Getされます。これは何らかのスコープの問題であるに違いありませんが、解決できませんか?fromJsonfromJson

4

1 に答える 1

5

これはスコープではありません。これはタイミングです。

fromJsonに渡す無名関数の最後まで、関数は に割り当てられませんeach

コールバックから呼び出すとget、HTTP 応答が戻ってきて関数が起動する前にその割り当てが行われます。

直接呼び出すと、まだ存在しません。

次のいずれかを並べ替えます。

    return this.each(function () {
        var fromJson = function (json) {
                // json stuff..
             }  

        if (opts.load_Json) {
            $.get("", function (result) {
                fromJson(opts.load_Json)
            });
        }

    });

または、関数宣言を使用します(巻き上げの対象となります):

    return this.each(function () {
        if (opts.load_Json) {
            $.get("", function (result) {
                fromJson(opts.load_Json)
            });
        }

        function fromJson (json) {
                // json stuff..
             }  
    });
于 2013-05-16T08:57:22.003 に答える