0

オートマッパー KO は初めてです。私はこのコードを持っています:

 var jData = [
                    { "Id": 2, "Name": "A" },
                    { "Id": 3, "Name": "B" },
                    { "Id": 4, "Name": "C" }]
            };
        var viewModel = ko.mapping.fromJSON(JSON.stringify(jData));
        ko.applyBindings(viewModel);

このコードは機能します:

<div data-bind="foreach : $data">
            <input type="text" data-bind='value: Name' />
            <br />
        </div>

しかし、地図で選択したい場合:

 <select id="prova" data-bind='options: $data, optionsText: "Name", optionsValue: "Id"    , value: Id'></select>

このエラーを受け取りました

バインディングの解析を有効にします。メッセージ: ReferenceError: 'Id' は定義されていません。バインディング値: options: $data、optionsText: "Name"、optionsValue: "Id"、値: Id

どうしたの?ありがとうL

4

2 に答える 2

2

この問題の根本的な原因は、ビューモデルにIdプロパティが含まれていないことです。追加する必要があります。私はこのようなものを実装します:

 var jData = [
                    { "Id": 2, "Name": "A" },
                    { "Id": 3, "Name": "B" },
                    { "Id": 4, "Name": "C" }]

function ViewModel(){
   var self = this;

   self.list = ko.mapping.fromJSON(JSON.stringify(jData));
   self.Id = ko.observable();
}

var viewModel = new ViewModel();
ko.applyBindings(viewModel);

HTML:

<select id="prova" data-bind='options: list, optionsText: "Name", optionsValue: "Id"    , value: Id'></select>

ここに作業中のフィドルがあります:http://jsfiddle.net/ardr8/

于 2012-12-17T19:50:16.963 に答える
2

問題は value:Id バインディングにあり、ID は "" にある必要があります。また、ドロップダウンで選択した値を設定するには、値バインディングを使用する必要があります。ID に設定するだけで、常に値 1 の値が選択されます。

<select id="prova" data-bind='options: $data, optionsText: "Name", optionsValue: "Id", value: "Id"'></select>

ここでjsfiddleを確認してください http://jsfiddle.net/uVfgx/

于 2012-12-17T17:29:01.597 に答える