-1
 var Foo = Foo || {};

Foo.Controller = (function ($) {
    var $page = $("#bar");
    var init = function () {
            console.log($page); // outputs: []
            console.log($.isEmptyObject($page)); // outputs: false
        }
    var public = {
        init: init
    }
    return public;
})(jQuery);
$("#FooPage").bind("pageinit", function () {
    Foo.Controller.init();
});

$ pageに値が割り当てられていないように見えるのはなぜですか?私はJQueryMobileを使用していますが、pageinitはモバイル版のドキュメント対応です。

4

2 に答える 2

2

$pageに割り当てられていませんpageinit。すぐに割り当てられます。これを試して:

var init = function () {
    console.log($page); // outputs: []
    console.log($('#bar'); // TELL US IF THIS LOGS THE RIGHT THING!
    console.log($.isEmptyObject($page)); // outputs: false
};

編集(Esailijaは別の問題を指摘しました):

Esailijaは私よりもはるかに優れた目を持っています。IIFEFoo.Controller結果に設定されています。その関数は何も返さないため、に設定されます。たぶんあなたはあなたの関数を持っているオブジェクトを返したいですか?その場合、の中に設定することで問題全体を回避できます。undefinedinit$pageinit

var Foo = Foo || {};

Foo.Controller = (function($) {
    var init = function () {
        var $page = $("#bar");
        console.log($page); // outputs: []  <-- not anymore (if #bar is really on the page)
        console.log($.isEmptyObject($page)); // outputs: false
    };
    return {init:init};
})(jQuery);
$("#FooPage").bind("pageinit", function () {
    Foo.Controller.init();
});
于 2012-07-02T16:48:12.270 に答える
0

の呼び出しを延期している場合でも、関数.initを作成している(想定される)すぐに呼び出される関数式は、ページが読み込まれる前にinit定義されます。var $page = $("#bar");

于 2012-07-02T16:48:15.563 に答える