Knockout映射选择json不起作用

时间:2012-12-17 17:11:36

标签: select data-binding knockout.js knockout-mapping-plugin

我是automapper 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'未定义; 绑定值:选项:$ data,optionsText:“Name”,optionsValue:“Id”,value:Id

怎么了? 谢谢 →

2 个答案:

答案 0 :(得分:2)

问题在于值:Id绑定,Id需要在“”中。此外,值绑定应该用于在下拉列表中设置所选值,只需将其设置为Id将始终选择值为1的值。

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

在这里查看jsfiddle http://jsfiddle.net/uVfgx/

答案 1 :(得分: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/