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()
returncreateSubmitFormHandler
并以这种方式引用它。如果选择器成本不高,您只需再次计算createSubmitFrmHandler
的值,然后使用$(my.selectors.createFrm).validate().form()在对话框模块中选择code>,而不是尝试引用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