我使用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格式的小部件? 然后,小部件将在满足条件时调用指定的函数。
感谢您的帮助。
答案 0 :(得分: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
。