私のJavaScriptライブラリ全体は、オブジェクトリテラル名前空間に構築されています。 init()から共通の関数、コントロール、検証などの各ページのロジックが含まれています。ページのinit()関数は、ページのボディIDに基づいて起動されます。複数のインスタンスを処理するオブジェクトリテラル
問題はコントロールセクションにあります。 AddressEntryという名前のオブジェクトリテラルがあります。このオブジェクトリテラルには、AddressEntry ASP.NET UserControlを処理する機能が含まれています。ページ上の1つの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)); });
}
};
:ここ
は文字通り私ののAddressEntryオブジェクト(関連情報までトリミング)です。
SFAIC.pages.salesProcess.Applicant = {
init : function() {
SFAIC.ctrls.AddressEntry.init("AddressGarage");
SFAIC.ctrls.AddressEntry.init("AddressMailing");
}
};
アドレスメール initは、アドレスガーベッジ initを上書きします。お互いを上書きせずにページに表示できるAddressEntry UserControlsを処理できるようにするには、SFAIC.ctrls.AddressEntryオブジェクトリテラルをオブジェクト化するために何ができますか?
私が間違っていると私を訂正してください:単一の関数(SFAIC.pagesのinit関数)内のすべてのAddressEntries(完全に異なるオブジェクトまたはDOM要素)を初期化しようとしています。 –
基本的に。それはASP.NET UserControlなので、UserControlの各インスタンスは、異なる接頭辞IDを持つ同じ要素をレンダリングします。たとえば、AddressMailingコントロールのAddressMailing_txtCity、AddressMailing_txtStateなど、AddressGarageコントロールのAddressGarage_txtCity、AddressGarage_txtStateなどです。 –