我已经使用knockout.js创建了两个用于映射数据的JSFiddle示例。
(1)http://jsfiddle.net/9nn2qpp8/没有ko.mapping插件
var ViewModel = function() {
var self = this;
this.entries = [
{ name: "one", type: "file" },
{ name: "two", type: "folder" },
{ name: "three", type: "file" }
];
};
ko.applyBindings(new ViewModel());
(2)http://jsfiddle.net/q49vfy6q/使用ko.mapping
var data = {entries: [
{ name: "one", type: "file" },
{ name: "two", type: "folder" },
{ name: "three", type: "file" }
]};
var viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
为什么(2)与(1)关于if绑定的评估的工作方式不同?
答案 0 :(得分:0)
映射插件会自动将所有内容包装为可观察对象 - 您需要在if
绑定中对其进行处理:
<!-- ko if: type() !== "file" -->
而不是:
<!-- ko if: type !== "file" -->
答案 1 :(得分:0)
因为当您使用映射时,您将每个属性转换为可观察的。
每个可观察属性都是一个函数,因此您需要执行该函数以返回其中的值。
在此处查看:http://jsfiddle.net/q49vfy6q/1/
<table>
<tbody data-bind="foreach: entries()">
<tr>
<td>
<!-- ko if: type() === "file" -->
答案 2 :(得分:0)
您根本不需要使用mapping
。您可以将data
直接传递到applyBindings()
:
var data = {entries: [
{ name: "one", type: "file" },
{ name: "two", type: "folder" },
{ name: "three", type: "file" }
]};
ko.applyBindings(data);