CodeProject.com に投稿されたこの記事「ASP.NET アプリケーションで KnockoutJS を使用する」をガイドとして使用して、ASP.NET 3.5 Web フォームを使用して再利用可能なデータ読み込みドロップダウン リストを作成しようとしていますが、クライアントに KnockoutJS を活用しています。 -side データバインディング。このドロップダウンの複数の独立したインスタンスは、同じページに独立して存在できる必要があります。
これまでのところ、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}}" />
次に、関数を使用して、この文字列を Javascript オブジェクトに変換しko.utils.parseJson()
ます。
var stringViewModel = document.getElementById("ddlRegionKO_hdnRegionListVMStorage").value;
var ddlRegionKO_pnlRegionDDLContainer_ViewModel = ko.utils.parseJson(stringViewModel);
ko.observable
次に、プロパティ定義をメソッドに変換しますko.observableArray
(これはリファクタリングが必要なセクションの 1 つですが、概念実証としては十分です)。
//
// 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 にまとめました ...ここ... 何かを見落としているのではないかと思いますが、それが何であるかはわかりません。私にはすべてが正しく見えます。
誰かが私が見落としているものを見ることができれば、私は非常に感謝しています!
ありがとう、
-g