Шаблон Javascript и Jquery живут? - PullRequest
0 голосов
/ 01 марта 2011

Я пытаюсь использовать шаблон модуля JavaScript , и я сталкиваюсь с проблемой, которую не знаю, как обойти.

Итак, у меня есть 2 файла сценария, так как я хочу отделить свой код и сделать его проще для чтения.

// script 1

var abc = (function (my, $)
{
    my.events = function ()
   {
        // selectors is from my base file(not shown as I don't think it is needed to be shown)
        // my.selectors.createFrm = '#createFrm'
        var createSubmitFrmHandler = $(my.selectors.createFrm).live('submit', function (e)
        {
            e.preventDefault();
        });

   }

   return my;

} abc || {}, jQuery));

// script 2

var abc = (function (my, $)
{
     my.dialogs = {

        addDialog: function ()
        {
            var $dialog = $('<div></div>').dialog(
            {
                width: 580,
                height: 410,
                resizable: false,
                modal: true,
                autoOpen: false,
                title: 'Basic Dialog',
                buttons:
                    {
                        Cancel: function ()
                        {
                            $(this).dialog('close');
                        },
                        'Create': function ()
                        {

                            jQuery.validator.unobtrusive.parse(my.selectors.createFrm)
                            // this is undefined as page loadup no form was found so live did not kick in
                            my.createSubmitFrmHandler.validate().form();

                        }
                    }
            });

            return $dialog;
        },

    return my;
} abc || {}, jQuery));

Поэтому я не уверен, как убедиться, что createSubmitFrmHandler определен, и продолжить то, что я делаю.

Редактировать

Я закончил тем, что делал что-то подобное

   var abc = (function (my, $)
    {
        my.events = function ()
       {
            // some one time events here
       }

        my.test = function() 
        {
            var add = $(selectors.createFrm).live('submit', function (e)
            {
                e.preventDefault();
            });

            return add;
        };
    }

Единственное, в чем я не уверен, так это в том, что если я буду вызывать эту функцию снова и снова, она будет продолжать создавать этот объект или будет смотреть и видеть, что прямая трансляция уже связана и больше не будет связываться?

1 Ответ

1 голос
/ 01 марта 2011

Суть шаблона модуля в том, что Javascript имеет область действия функции: переменные, определенные с помощью var, являются локальными для функции, в которой они определены.

(function() {
    var foo = 'bar';
    // foo == 'bar'
})();
// foo == undefined

Поскольку вы определяете createSubmitFrmHandler вфункцию, которую вы назначаете на my.events, вы не можете ссылаться на нее вне тела этой функции.Есть несколько способов обойти это.Точка передачи my всем модулям заключается в том, что они могут делиться секретами через него: вы можете установить my.events.handler = createSubmitFrmHandler в первом модуле, и my.events.handler будет виден в другом модуле, поскольку my виден там.Вы могли бы my.events() вернуть createSubmitFrmHandler и ссылаться на него таким образом.Если селектор не является дорогостоящим, вы можете просто снова вычислить значение createSubmitFrmHandler и использовать $(my.selectors.createFrm).validate().form(); в диалоговом модуле вместо попытки ссылаться на createSubmitFrmHandler.Все, что тебе подходит.

...