首页 文章

Knockout映射选择json不起作用

提问于
浏览
0

我是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' />
            
</div>

但如果我想通过 Map 选择:

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

我收到了这个错误

启用解析绑定 . 消息:ReferenceError:'Id'未定义;绑定值:选项:$ data,optionsText:"Name",optionsValue:"Id",value:Id

怎么了?谢谢L

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/

  • 2

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

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

    检查jsfiddle这里http://jsfiddle.net/uVfgx/

相关问题