1

我已经使用 jquery 小部件工厂编写了一些小部件。通常,我使用 JavaScript 代码块中的小部件构造函数传递选项和回调引用。

现在我想在自动生成的 html 页面中使用小部件并将选项传递给它们而不使用 JavaScript 块。我在嵌入式 json 中指定了一个常见的 JavaScript 代码块解析并将其传递给小部件的选项。

<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?
  }
}

换句话说,如果解释 JSON 编码信息的代码知道足够多的知识来找到回调函数引用,那么它可能会this在调用函数时找出一个合适的对象来使用。

于 2013-07-29T20:09:28.003 回答