CodeProject.comに掲載されているこの記事を使用すると、「Using KnockoutJS in your ASP.NET applications」をガイドとして使用します。ASP.NETを使用して、再利用可能なデータ読み込みドロップダウンリストを作成しようとしています。 3.5 Webフォームが、KnockoutJSをクライアント側のデータバインディングに利用しています。このドロップダウンの複数の独立したインスタンスは、同じページに独立して存在できる必要があります。ASP.NET WebFormsサーバーのサイドポストの間にViewModelを永続的に残しています...
これまでのところ、CodeProject.comの投稿では、設定方法を説明する上で非常に貴重でした。私は、更新されたViewModelデータをサーバーとクライアントの間でJSON文字列として渡し、オブジェクト(サーバーとクライアントの両方)。私が懸命にしているのは、単純な部分でなければならないことです。 ViewModelをドロップダウンリストにバインドする
だから私はJSON文字列を隠しフィールドに読み込むことから始めます。これはリージョンと単一のSelectedRegionのリストを含んでいます。
<input type="hidden" id="ddlRegionKO_hdnRegionListVMStorage" value="{"Regions":[{"RegionName":"Mid Atlantic USA","RegionId":2},{"RegionName":"Mid West USA","RegionId":10},{"RegionName":"North Central USA","RegionId":5},{"RegionName":"North East USA","RegionId":1},{"RegionName":"North West USA","RegionId":7},{"RegionName":"Other","RegionId":9},{"RegionName":"South Central USA","RegionId":6},{"RegionName":"South East USA","RegionId":3},{"RegionName":"South West USA","RegionId":8}],"SelectedRegion":{"RegionName":"North Central USA","RegionId":5}}" />
私はその後ko.utils.parseJson()
機能を使ってJavaScriptオブジェクトにこの文字列を変換して実行します。
var stringViewModel = document.getElementById("ddlRegionKO_hdnRegionListVMStorage").value;
var ddlRegionKO_pnlRegionDDLContainer_ViewModel = ko.utils.parseJson(stringViewModel);
それから私は(これは、リファクタリングする必要がありますそれらのセクションの一つであるが、概念実証としてそれで十分)ko.observable
とko.observableArray
メソッドにプロパティ定義を変換します。このことを考えると
//
// Convert all the model properties to KO Propety/Methods
for (var propertyName in ddlRegionKO_pnlRegionDDLContainer_ViewModel) {
switch(propertyName.toUpperCase())
{
//
// Multiple Region objects are stored as an array in the regions property.
case "REGIONS":
ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName] = ko.observableArray(ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName]);
break;
//
// Only a single region may be selected at any time.
case "SELECTEDREGION":
ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName] = ko.observable(ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName]);
break;
};
};
、私は...ドロップダウンリストを移入するとapplyBindings
メソッドが呼び出されたときにSelectedRegionが選択
ko.applyBindings(ddlRegionKO_pnlRegionDDLContainer_ViewModel);
を期待する私はJSFiddleですべて一緒にこれを入れています。.. here ...私は何かを見落としているかもしれないと思うが、それが何であるかはわからない。すべてが私に正しいように見える。
誰かが私が見落としているものを見ることができたら、私は非常に感謝しています!
おかげで、-g
感謝!私はあなたが "optionsValue"プロパティを知らず、Jsonデータから領域リストをロードされたドロップダウンリストを取得したので、答えをアップアップしました。しかしそれは半分しかありません。バインディングに基づいて、私はSelectedRegionがドロップダウンリスト(ModelViewで定義されている)であらかじめ選択されていると期待します。また、ドロップダウンリスト(data-bind = "text:SelectedRegion()。RegionName")にテキストボックスをバインドしようとしても何も起こりません。だから私はおそらく "SelectedRegion"を定義している方法に何か問題がありますか?再度、感謝します!! –
@ GaryO.Stenstrom申し訳ありませんが、初めてのことは見ませんでした。私の編集を参照してください。要するに、私のソリューションは選択された値を設定しますが、選択した値をオブジェクトにバインドする方法については何らかの調査を行う必要があります。私が提供したリンクを見て、それが役立つかどうかを見てみるか、ノックアウトのドキュメントを読み始めてください。 – hawkke
私はJsFiddle(http://jsfiddle.net/Ds44T/6/)にバインドされたテキストボックスを追加しましたが、それはIEでのみ動作し、他のブラウザでは動作しません。 –