我的整个 JavaScript 库是在一个对象字面量命名空间中构建的。它包含从 init() 到常用函数、控件、验证等的每个页面的逻辑。页面的 init() 函数根据页面的 body id 触发。
我遇到的问题在我的控制部分。我有一个名为 AddressEntry 的对象文字。此对象文字包含处理我的 AddressEntry ASP.NET UserControl 的功能。它与页面上的一个 AddressEntry 控件一起工作得很好,但是当有多个时,只有页面上的最后一个按预期工作。
这是我的AddressEntry 对象文字(精简为相关信息):
SFAIC.ctrls.AddressEntry = {
inputs : {
city : undefined,
cityState : undefined,
hidden : {
city : undefined,
state : undefined
},
},
fn : {
root : undefined,
citySelected : function($ddl) {
var $selected = $ddl.find(":selected");
this.root.inputs.hidden.city.val($selected.val());
this.root.inputs.hidden.state.val($selected.text().split(", ")[1]);
}
},
init : function(addressId) {
var self = this,
fn = self.fn,
inputs = self.inputs,
hidden = inputs.hidden;
inputs.city = SFAIC.fn.getContentElement(addressId + "_ddlCity", SFAIC.$updatePanel);
inputs.cityState = SFAIC.fn.getContentElement(addressId + "_ddlCityStateLocked", SFAIC.$updatePanel);
hidden.city = SFAIC.fn.getContentElement(addressId + "_txtCity", SFAIC.$updatePanel);
hidden.state = SFAIC.fn.getContentElement(addressId + "_txtState", SFAIC.$updatePanel);
fn.root = this;
inputs.city.change(function() { fn.citySelected($(this)); });
inputs.cityState.change(function() { fn.citySelected($(this)); });
}
};
然后,页面对象字面量看起来像这样(再次,修剪):
SFAIC.pages.salesProcess.Applicant = {
init : function() {
SFAIC.ctrls.AddressEntry.init("AddressGarage");
SFAIC.ctrls.AddressEntry.init("AddressMailing");
}
};
很明显,AddressMailing init 会覆盖AddressGarage init。我可以做些什么来客观化SFAIC.ctrls.AddressEntry对象文字,以便能够处理我在页面上可能拥有的尽可能多的 AddressEntry UserControls 而不会相互覆盖?