Mik*_*keW 5 knockout-mapping-plugin knockout.js
我正在尝试淘汰映射样本,并认为我几乎就在那里.我似乎无法在viewModel.foos中添加新的Foo - 有谁能看到我在这里错过的内容?
var Foo = function (data) {
var self = this;
self.id = data.id;
self.Name = ko.observable(data.Name);
}
var dataMappingOptions = {
key: function(data) {
return data.id;
},
create: function (options) {
return new Foo(options.data);
}
};
var viewModel = {
foos: ko.mapping.fromJS([]),
loadInitialData: function () {
ko.mapping.fromJS(serverData, dataMappingOptions, viewModel.foos);
},
loadUpdatedData: function () {
ko.mapping.fromJS(serverData, dataMappingOptions, viewModel.foos);
}
};
viewModel.addFoo = function () {
viewModel.foos.push(ko.mapping.fromJS(new Foo()));
viewModel.loadUpdatedData();
}
<ul data-bind="template: {name: 'TopTemplate'}"></ul>
<script type="text/html" id="TopTemplate">
<li><span>Result</span>
<ul data-bind=" template: {name: 'FooTemplate' , foreach: foos} " style="list-style-type:circle;margin-left:15px">
</ul>
</li>
<button data-bind='click: addFoo'>Add Foo</button>
</script>
<script type="text/html" id="FooTemplate">
<li><span data-bind='text: Name'></span>
</li>
</script>
Run Code Online (Sandbox Code Playgroud)
小智 11
由于原始海报在Foo类成员中应用了observable,因此不需要将ko.mapping.fromJS应用于它.但是我发现当你有一个'原始'json对象(没有映射)你需要添加到一个可观察数组(即你之前已经应用了ko.mapping.fromJS())时,你确实需要执行ko.mapping.fromJS例如
myArray.push(ko.mapping.fromJS(myNewRawJsonItem));
Run Code Online (Sandbox Code Playgroud)
否则你的模板绑定(如果有的话)会抱怨"TypeError xxxx不是函数".
你可以直接将一个新的 Foo 推送到你的 observableArray 中。
以下是加载一些初始数据,然后加载一些更新数据以及用于在客户端添加新项目的按钮的示例。 http://jsfiddle.net/rniemeyer/wRwc4/
var viewModel = {
foos: ko.mapping.fromJS([]),
loadInitialData: function() {
ko.mapping.fromJS(initialData, dataMappingOptions, viewModel.foos);
},
loadUpdatedData: function() {
ko.mapping.fromJS(updatedData, viewModel.foos);
}
};
viewModel.addFoo = function() {
viewModel.foos.push(new Foo({ id: 0, Name: "New" }));
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6499 次 |
| 最近记录: |