0

Javascript モジュール パターンを使用しようとしています。モジュールに、json ファイルがロードされたときに呼び出すことができるパブリック メソッドが必要です。この単純な例では、モジュールは init で json をロードし、パブリック メソッド 'loadPic' が呼び出されたときに DOM 要素にイメージをロードします (ロードする必要があります)。画像のソースは json ファイルにあります。) 初めてスクリプトを実行すると、次のエラーが表示されます: Uncaught TypeError: Cannot read property 'src' of undefined. 私の解釈では、データがロードされる前に「loadPic」メソッドが自動的に呼び出されます...しかし、それを防ぐ方法がわかりません。コードは次のとおりです(PS:jQueryの「ライト」バージョンであるZeptoを使用しています):

<!-- 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));
4

1 に答える 1

1

私の問題は、データが非同期的にロードされることでした-そのため、まだロードされていないデータを使用しようとしていました。データをロードした後、init にイベント トリガーを追加しました。次に、イベントをリッスンし、その後のみ loadPic メソッドを呼び出します... ご協力ありがとうございます。

于 2012-12-21T20:48:03.850 に答える