Вся моя библиотека JavaScript построена в пространстве имен литералов объектов. Он содержит логику каждой страницы от init () до общих функций, элементов управления, проверки и т. Д. Функция init () страницы запускается на основе идентификатора тела страницы.
Проблема у меня в разделе управления. У меня есть литерал объекта с именем 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 , чтобы иметь возможность обрабатывать столько элементов UserControl AddressEntry, сколько у меня может быть на странице, без их переопределения друг друга?