您好我正在扩展现有插件以使用静态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
并在没有回拨的情况下直接致电fromJson
,我会收到一条错误消息,指出fromJson
未定义。这必须是某种形式的范围问题,但我不能解决它?
答案 0 :(得分: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..
}
});