我正在尝试使用 Javascript 模块模式。我希望我的模块有一个可以在加载 json 文件时调用的公共方法。在这个简单的示例中,模块在 init 上加载 json,并且(应该)在调用公共方法 'loadPic' 时将图像加载到 DOM 元素中。图像的来源在 json 文件中。)第一次运行脚本时,出现以下错误: Uncaught TypeError: Cannot read property 'src' of undefined。我的解释是在加载数据之前自动调用方法'loadPic'......但我不知道如何防止这种情况。这是代码(PS:我使用的是 Zepto,jQuery 的“轻量级”版本):
<!-- language: lang-js -->
/* in module file: DualG.js */
;(function ($) {
$.extend($.fn, {
DualG: function (element, options) {
var defaults = { // not used yet...
indexStart:0,
url: 'js/data.json'
},
my = {},
init,
loadPic,
plugin = this;
plugin.settings = {};
plugin.pics = [];
init = function () {
plugin.settings = $.extend{}, defaults, options);
$.getJSON(plugin.settings.url, function (data) {
var l = data.images.length, i;
for (i = 0; i < l; i = i + 1) {
plugin.pics[data.images[i].index] = data.images[i];
}
});
init();
my.loadPic = function (index, container) {
$(container).empty().append($("<img>").attr({"src":plugin.pics[index].src}));
};
return my;
}
});
}(Zepto));