1

ページ上の特定のdivへのコンテンツの読み込みを処理するウィジェットをjQueryで構築しようとしています。私がこれをしている理由は、私のコードを乾いた状態に保つためです。私はJavaScriptの読み込みにHeadJSを使用していることを言及する必要があります。

これは私のウィジェットコードです:

(function ($, window, document, undefined) {

    $.widget ("my.contentloader", {

        options: {

            loadingMessage: true,

            errorDiv: '#error',

            contentDiv: '#content'

        },

        _create: function () {

            $.ajax ({

                type: "POST", 

                url: self.options.url, 

                data: {limit: self.options.params.limit, offset: self.options.params.offset},

                beforeSend: function (html) {

                    // Check if loading message should be displayed

                    if (self.options.loadingMessage) {

                        $(self.options.contentDiv).html ("<div id='loading'>Loading</div>");

                    }

                },

                success: function (html) {

                    if (self.options.loadingMessage) {

                        $('#loading').remove ();

                    }

                    $(self.options.contentDiv).html (html);

                },

                error: function (html) {

                    $(self.options.errorDiv).html (html);

                }

            });

        },

        _setOption: function (key, value) {

            this.options[key] = value;

            $.Widget.prototype._setOption.apply (this, arguments);

    }

    });

})(jQuery, window, document);

このウィジェットファイルとjqueryを呼び出しページに含めます。次に、次のようなプラグインを使用します。

 $(window).contentloader ({

  url: 'loading/content/url'

 });

問題は、このエラーが発生することです。

Uncaught TypeError: Cannot read property 'url' of undefined
4

1 に答える 1

2

selfどこにも定義していないので、window.self代わりに取得しています。

window オブジェクトへのオブジェクト参照。

optionsそれにはプロパティがありません。;thisの代わりに使用する必要があります。コールバックでself特定のものを強制する必要がある場合は、次のようにします。this

var _this = this; // or 'var that'

コールバックを定義して使用する前に_this(またはthat):

_create: function () {
    var _this = this;
    $.ajax ({
        // ...
        beforeSend: function (html) {
            if (_this.options.loadingMessage) {
                //...

の存在はwindow.selfvar self悪い名前の選択になります。

于 2012-05-22T07:16:27.133 に答える