0

プロジェクトの 1 つで使用した JavaScript の混乱に満足できなかったので、すべてを次のプラグイン構造に入れることにしました。私は C# 開発者であり、jQuery をあまり使用していませんが、楽しそうです。

(function($) {

var methods = {
    init: function(options) {

        if (!cookiesEnabled()) {
            window.location = "http://www.mysite.com/error?msg=nocookies";
        }
        // autosize middle frame if right side has no content
        autosizeframes('#right-side');

        // EVENTS
        $(document).on('submit', '#signin_form', function (event) {
            event.preventDefault();
            postAjaxForm($(this));

        });

        $(document).on('submit', '#register_form', function (event) {
            event.preventDefault();
            postAjaxForm($(this));

        });

        $(document).on('click', '.user-settings', function (e) {
            var menu = $(this).parent().children('#menu');
            if ($(menu).is(':visible')) {
                $(menu).slideUp(500);
            } else {
                $(menu).slideDown(500);
            }
        });
    }

};
// METHODS Commonly Used
var postAjaxForm = function(form) {
    var updateElement = $(form).attr('UpdateElement');

    if (!$(updateElement).length) {
        alert('Unable to find update element');
        return false;
    }

    if ($(form).valid()) {
        $.ajax({
            type: $(form).attr('method'),
            url: $(form).attr('action'),
            data: $(form).serialize(),
            success: function(response) {
                $(updateElement).html(response);
                $.validator.unobtrusive.parse($(updateElement).find('form'));
            },
            error: function(xhr,stats,errorMessage) {

            }
        });
    }
    return true;
};

var checkLength = function(element) {
    if ($.trim(element).length) {
        return true;
    }
    return false;
};
var autosizeframes = function(element) {
    if (!$.trim($(element).len)) {
        $('#middle').width($('#middle').width() + $(element).width());
    }
};

var cookiesEnabled = function() {
    var enabled = (navigator.cookieEnabled) ? true : false;
    if (typeof navigator.enabled == "undefined" && !enabled) {
        document.cookie = "_test";
        enabled = (document.cookie.indexOf("_test") != -1) ? true : false;
    }
    return enabled;
};

$.fn.site = function(method) {
    if (methods[method]) {
        return methods[method].apply(this,Array.prototype.slice.call(arguments, 1));
    } else if (typeof method == 'object' || !method) {
        return methods.init.apply(this, arguments);
    } else {
        $.error('Method' + method + ' Does not exist');
    }
};
})(jQuery);

入力していただきありがとうございます

4

1 に答える 1

0

私見ですが、一般的なユーティリティである場合にのみ、jQueryプラグインに変換するのが理にかなっています。

メソッドが特定のサイトに固有である場合は、jQueryの名前空間にドロップするのではなく、独自の名前空間やオブジェクトでラップする方がよいでしょう。

cookiesEnabledしたがって、関数を$(nb:not )に追加することは理にかなっているかもしれませんが、私はあなたが理にかなっている$.fnとは思いません。$.fn.site

特に、の関数は、既存のjQueryオブジェクトにカプセル化されているように、要素のコレクション$.fnに適用されることになっています。このオブジェクトは、として関数に渡されます。を介して公開された関数は、それを実行しません。thismethods.init$.fn.site

于 2013-03-15T02:27:52.157 に答える