pin*_*goo -1 javascript jquery jquery-plugins
嗨,我正在扩展现有插件以使用静态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..
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果我在没有回调的情况下直接删除$.Get和调用,fromJson我会收到错误消息,说明fromJson未定义.这必须是某种形式的范围问题,但我不能解决它?
这不是范围.这是时机.
在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)
});
}
});
Run Code Online (Sandbox Code Playgroud)
或使用函数声明(将被提升):
return this.each(function () {
if (opts.load_Json) {
$.get("", function (result) {
fromJson(opts.load_Json)
});
}
function fromJson (json) {
// json stuff..
}
});
Run Code Online (Sandbox Code Playgroud)