0

私はjavascriptメニューを開発しています(jQueryを使用)。

例として、以下は、メニューを作成するカスタム関数に渡すitemsオブジェクトの構造です。

var items = {
    0: {
        name: 'file',
        submenu: {
            0: {
                name: 'open',
                hasSubitems: true,
                subitems: {
                    0: {
                        name: 'file',
                        hasSubitems: false,
                        callback: function() { alert('you opened a file!'); }
                    },
                    1: {
                        name: 'project'
                        hasSubitems: false,
                        callback: function() { alert('you opened a project!'); }
                    }
                }
            },
            1: {
                name: 'exit',
                hasSubitems: false,
                callback: function() { alert('you logged out!'); }
            }
        }
    },
    1: {
        name: 'edit',
        submenu: {
           ...
        }
    }
}

将来のコールバックを含め、上記をデータベースに保存できるようにしたいと思います。メニューなどを動的に構築するためのインターフェースを作成するつもりです。

JSON文字列を作成してそのように保存できることに気付きましたが、コールバック関数についてはどうでしょうか。私はevalを何度も使用しないように勧められていますが、後で呼び出すことができるように、他にどのような方法でこの情報をデータベースに安全に保存できるでしょうか。

4

1 に答える 1

1

JSONは(名前にもかかわらず)言語に依存しないため、プリミティブ値のみをサポートします。コールバック関数は言語固有(この場合はjavascript)であるため、純粋なJSONとして解釈する必要のあるものに含めることはできません。

ここからコールバックコードを引き出すことをお勧めします。代わりに、それぞれを区別するために必要なパラメーターを含めます。次に、このJSONオブジェクトを、コールバックではなくヘルパー関数を使用してJSテンプレートエンジン( Handlebars.jsなど)で実行します。これらは、(現在有効な)JSONオブジェクトのコールバック関数を置き換えるために使用したパラメーターを使用して呼び出すことができます。

于 2012-05-22T04:21:19.113 に答える