1

jquery ウィジェット ファクトリを使用していくつかのウィジェットを作成しました。通常、JavaScript コード ブロックでウィジェット コンストラクターを使用して、オプションとコールバック参照を渡します。

ここで、自動生成された HTML ページでウィジェットを使用し、JavaScript ブロックを使用せずにオプションを渡したいと考えています。一般的な JavaScript コード ブロックが解析してウィジェットに渡すオプションを埋め込み json で指定しています。

<div id="search_widget">
    <script type="application/json">
    {
        "search": {
            "search_string": "text to be searched",
            "callback": "a function object in an outer scope"
        }
    }
    </script>
</div>

スコープを保持する関数オブジェクトを json 形式でウィジェットに渡すにはどうすればよいですか? ウィジェットは、条件が満たされたときに指定された関数を呼び出します。

ご協力いただきありがとうございます。

4

1 に答える 1

0

Function関数本体をテキストとして渡すことができますが、受信コンテキストはそれが関数であることを認識し、コンストラクター (または何か)で「再構成」する必要があります。「スコープ」を保持することはできませんが、JSON のブロックではあまり意味がありません。

関数名、識別パターン、またはその他の好きなものを渡すこともできますが、受信側のコードがそれに対してどのように動作するかを知っていることが条件です。

JSON は、「関数」を表すメカニズムを提供しません。この概念はフォーマットとは完全に異質であり、言語に中立であることを意図しているため、当然のことながらそうです。

編集— 関数を名前でエンコードする場合は次の点に注意してください。

<script type="application/json">
{
    "search": {
        "search_string": "text to be searched",
        "callback": "search_callback_23"
    }
}
</script>

次に、オブジェクトを取得してコンテンツを解釈するコードは、常に外側の JSON オブジェクトをコンテキストとして関数を呼び出すことができます。

function handleJSON( the_JSON_from_the_example ) {
  var json = JSON.parse(the_JSON_from_the_example);
  if ("search" in json) {
    var searchTerm = json.search.search_string;
    var callback = findCallbackFunction(json.search.callback); // whatever 
    callback.call(json, searchTerm); // or json.search maybe?
  }
}

thisつまり、JSON でエンコードされた情報を解釈しているコードが、コールバック関数の参照を見つけるのに十分な知識を持っている場合、関数を呼び出すときに使用する適切なオブジェクトをおそらく見つけ出すことができます。

于 2013-07-29T20:09:28.003 に答える