javascript - 向挖空映射对象添加操作

标签 javascript knockout.js knockout-mapping-plugin

我正在努力向我的 Knockout Mapping 对象添加操作。

这就是我现在所处的位置 - 我正在尝试遵循 Knockout: Mapping API information .

这是 HTML:

<a href="#" id="AddContact" class="add-button" type="button" data-bind="click: addContact">+ Add Contact</a>

<div id="ContactList">
    <table>
        <thead>
            <tr>
                <th>ID</th><th>Name</th><th></th>
            </tr>
        </thead>
        <tbody data-bind="foreach: $root">
            <tr>
                <td data-bind="text: ContactID"></td>
                <td data-bind="text: DisplayName"></td>
                <td></td>
            </tr>
        </tbody>
    </table>
</div>

这是我第一次尝试连接 Knockout:

var baseModel = {
    addContact: function() {
        alert('Woo!');
    }
};

contacts = ko.mapping.fromJS('[{"ContactID":6,"DisplayName":"Doe, John"},{"ContactID":7,"DisplayName":"Rogers, Mister"}]', { }, baseModel);
ko.applyBindings(contacts);

现在,如果我从 ko.mapping.fromJS 中删除附加参数({} 和 baseModel),我的所有数据都会正确显示在表格中。但是(正如预期的那样),我收到“添加联系人”链接的绑定(bind)错误。如果我重新添加 baseModel,单击“添加联系人”链接可以工作,但不会显示任何数据。我没有以某种方式得到任何错误,所以我对那里发生的事情有点困惑。

我是 KO 新手,所以我觉得我错过了一些非常简单的东西。我已经在 StackOverflow 上进行了搜索,但是此时,我只是插入代码来看看什么有效,而不是真正理解这里发生了什么。有人可以提供一些额外的解释并指出我正确的方向吗?谢谢。

最佳答案

您正在使用 ko.mapping.fromJS ,但您传递的是字符串,而不是对象/数组。使用 fromJSON 或传入真实数组。

此外,您应该在 baseModel 上应用绑定(bind),并且联系人应该是虚拟机的一个字段。然后你可以使用 foreach: contact 而不是你奇怪的 foreach: $root

查看修改这些更改:http://jsfiddle.net/antishok/kR4jc/3/

编辑 - 使用代码更新答案,以便问题可以独立存在。

JavaScript

var baseModel = {
    addContact: function() {
        alert('Woo!');
    }
};

baseModel.contacts = ko.mapping.fromJSON('[{"ContactID":6,"DisplayName":"Doe, John"},{"ContactID":7,"DisplayName":"Rogers, Mister"}]');

ko.applyBindings(baseModel);​

HTML

<a href="#" id="AddContact" class="add-button" type="button" data-bind="click: addContact">+ Add Contact</a>

<div id="ContactList">
    <table>
        <thead>
            <tr>
                <th>ID</th><th>Name</th><th></th>
            </tr>
        </thead>
        <tbody data-bind="foreach: contacts">
            <tr>
                <td data-bind="text: ContactID"></td>
                <td data-bind="text: DisplayName"></td>
                <td></td>
            </tr>
        </tbody>
    </table>
</div>​

关于javascript - 向挖空映射对象添加操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13205622/

相关文章:

javascript - Knockoutjs 映射和非结构化数据

knockout.js - knockout 映射验证

javascript - jQuery 对话框弹出将 Json 返回到新页面而不是当前页面

javascript - 如何选择通过 jQuery load() 函数加载的元素?

javascript - Jquery 单选按钮焦点不起作用

jquery - 无法使用 jQuery/knockout 获取 JSON 对象的文本值

javascript - div 点击事件在页面加载时自动触发

javascript - Knockout.js - 如何在 foreach 中绑定(bind)数据变量

javascript - 将 JavaScript 检测与 MVC4 显示模式集成的最佳方式是什么?

javascript - knockout JS : UI is not updating after deleting Item