【问题标题】:How to bind anonymous objects using knockout mapping plugin?如何使用淘汰映射插件绑定匿名对象?
【发布时间】:2014-09-12 01:27:46
【问题描述】:

我正在尝试列出此 json 数据中的所有用户名:

[{
        "full_name": "root",
        "group": 0,
        "home": "/root",
        "username": "root",
        "id": 1
    }, {
        "full_name": "Owner of many system processes",
        "group": 1,
        "home": "/root",
        "username": "daemon",
        "id": 2
    }, {
        "full_name": "System",
        "group": 5,
        "home": "/",
        "username": "operator",
        "id": 3
    }]

我的 HTML 如下所示:

 <body>
        <h2>Knockout list</h2>
        <ul data-bind="foreach: users">
            <li data-bind="text: username"></li>
        </ul>

        <script type="text/javascript">
            function getUsers()
            {
                return $.ajax
                        ({
                            type: "GET",
                            url: "http://XXX.XXX/api/userinfo",
                            username: "root",
                            password: "meh",
                            cache: false,
                            dataType: "json"
                        });
            }

            getUsers().done(function(results)
            {
                var users = "{users: " + results + "}";
                var viewModel = ko.mapping.fromJS(users);
                ko.applyBindings(viewModel);
            });

        </script>
 </body>

在控制台中我收到此错误:

ReferenceError: users is not defined
with($context){with($data||{}){return{'foreach':function(){return users }}}}

我不认为向 json 添加任何内容是一个好主意。我正在尝试使用var users = "{users: " + results + "}";,但这比其他任何事情都更加绝望,如果可能的话我想避免它。

您知道如何进行这项工作吗?谢谢。

【问题讨论】:

    标签: javascript json knockout.js knockout-mapping-plugin


    【解决方案1】:

    鉴于您的 HTML,您的视图模型需要有一个名为 users 的属性,因为这就是您在 foreach 循环中迭代的内容。我不能确定,但​​是从结果中创建新对象的那一行看起来不正确。您可以尝试在视图模型上创建显式用户属性并将映射结果分配给它:

    var viewModel = {};
    viewModel.users = ko.mapping.fromJS(data);
    ko.applyBindings(viewModel);
    

    创建了一个jsfiddle,它在那里工作。

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 2013-05-27
      • 1970-01-01
      • 2014-03-26
      • 2014-03-20
      • 2012-04-13
      • 2018-10-13
      • 2013-07-16
      • 2012-09-05
      相关资源
      最近更新 更多