【问题标题】:Knockoutjs one to many mapping not workingKnockoutjs 一对多映射不起作用
【发布时间】:2014-12-10 07:27:56
【问题描述】:

在下面的代码 sn-p 中,我正在使用 knockoutjs 映射插件创建父子视图模型。我在映射中没有收到任何错误但是当我运行应用程序时,它会抛出错误 name is not defined。

data = {
                    "Id": 1,
                    "Name": "Microsoft",
                    "Address": "USA",
                    "WebPage": "SS",
                    "Employees": [
                        {
                            "Id": 1,
                            "FirstName": "sadsasa",
                            "LastName": "ADF",
                            "Twitter": "dfd",
                            "WebPage": "sdfdf"
                        },
                        {
                            "Id": 2,
                            "FirstName": "sadsasa",
                            "LastName": "ADF",
                            "Twitter": "dfd",
                            "WebPage": "sdfs"
                        },
                        {
                            "Id": 3,
                            "FirstName": "sadsasa",
                            "LastName": "ADF",
                            "Twitter": "dfd",
                            "WebPage": "sfdfs"
                        }
                        ]
                    };
        var mapping = {
            'Employees': {
                create: function (options) {
                    alert(options);
                    return new PersonViewModel(options.data);
                }
            }
        }
        function PersonViewModel(data) {
            ko.mapping.fromJS(data);
        }
        function CompanyViewModel(data) {
    
            ko.mapping.fromJS(data, mapping, this);
        }
        var company;
        $(document).ready(function () {
            $.ajax({
                url: '/api/Greet',
                type: 'GET',
                dataType: 'json',
                success: function (result) {
    
                    data = JSON.stringify(result);
                    company = new CompanyViewModel(data);
                    console.log(company);
                    ko.applyBindings(company);
                },
                error: function (e) {
                    alert(e);
                }
            });
        });
    
    
    
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div>
        FirstName:  <span data-bind="text:Name"></span>
    
    </div>

【问题讨论】:

标签: asp.net-mvc knockout.js


【解决方案1】:

你需要对你的代码做一些小的修改。

查看模型:

 function PersonViewModel(data) {
        ko.mapping.fromJS(data,mapping,this);
    }

    function CompanyViewModel(data) {
        self.childlist=ko.observableArray();
        ko.mapping.fromJS(data, mapping, this);
        self.childlist.push(new PersonViewModel()); //child array
    }

查看:

<div>
    <b>FirstName:</b>  <span data-bind="text:Name"></span>
    <div data-bind="foreach:Employees">
    <span data-bind="text:Id"></span>
    </div>
</div>

工作小提琴here

如果有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2013-05-15
    相关资源
    最近更新 更多