Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript模块模式和Jquery live?_Javascript_Live_Jquery_Module Pattern - Fatal编程技术网

Javascript模块模式和Jquery live?

Javascript模块模式和Jquery live?,javascript,live,jquery,module-pattern,Javascript,Live,Jquery,Module Pattern,我试图使用,我遇到了一个问题,我不知道如何解决 因此,我有两个脚本文件,因为我想分离我的代码,使其更易于阅读 // 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.

我试图使用,我遇到了一个问题,我不知道如何解决

因此,我有两个脚本文件,因为我想分离我的代码,使其更易于阅读

// 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));

我唯一不确定的是,如果我反复调用这个函数,它会继续生成这个对象吗?或者它会看到live已经绑定了,不会再进行绑定吗?

模块模式的要点是Javascript具有函数作用域:用
var
定义的变量是其中的函数的局部变量它们是定义的

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

由于在分配给
my.events
的函数中定义了
createSubmitFrmHandler
,因此不能在该函数体之外引用它。有几种方法可以解决这个问题。将
my
传递给所有模块的意义在于它们可以通过它共享机密:您可以在第一个模块中设置
my.events.handler=createSubmitFrmHandler
,并且
my.events.handler
将在另一个模块中可见,因为
my
在那里可见。您可以使用
my.events()
return
createSubmitFormHandler
并以这种方式引用它。如果选择器成本不高,您只需再次计算
createSubmitFrmHandler
的值,然后使用
$(my.selectors.createFrm).validate().form(),而不是尝试引用
createSubmitFrmHandler
。随你的便。

@Tgr-对不起,我不明白你刚才说的话。我没有吗$(my.selectors.createFrm).live('submit',…)。这是我使用模块模式的第一天……你是说我应该使用这个.createSubmitFrmHandler.validate().form()?如果是这样,我尝试了这个方法并得到了“my.createSubmitFrmHandler未定义”更新的答案,希望它现在更有意义。@chobo2:多次调用my.test将绑定多个事件处理程序,但为什么要这样做?由于事件处理程序是活动的,因此,如果添加了新表单,则无需再次绑定它。@Tgr-hmm好吧,我现在有它,它会多次执行,但您有权解释为什么要执行多次。我正试图找出如何放置代码,因为这与我过去的做法完全不同。
(function() {
    var foo = 'bar';
    // foo == 'bar'
})();
// foo == undefined