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;
};
}
私が確信していない唯一のことは、この関数を何度も呼び出すと、このオブジェクトを作成し続けるのか、それともライブが既にバインドされていて、それ以上バインドしないことを確認するのかということです。