我试图将我的数据绑定到视图中,但是我的所有尝试都失败了。
有一个数组的数据,我存储在一个变量,后来使用映射插件,我正在使那些可观察的,以绑定到视图。
有趣的是,我在console中没有错误,我检查了
<span data-bind="text: ko.toJSON(Item)"></span> 我可以看到我的数组,但我看不到它绑定到视图。
脚本代码:
console.log(ko.mapping.fromJS(jsonData));
var viewModel = new MainModel();
viewModel.Item(ko.mapping.fromJS(jsonData));
ko.applyBindings(viewModel);小提琴链接是Here。
这是我关于映射插件.Please的第一条线索,建议我参考一下如何使用映射插件构建一些复杂的东西。
任何更好的方法都是可取的。
发布于 2014-11-24 05:39:32
我不记得了,但这和我两天前问的问题一样。
我想,如果你想要类似的一旦问题,我已经解决了,你可以找到它在你的更新小提琴。我还将淘汰版更新为3.2.0。
http://jsfiddle.net/C46pU/9/
var mapping = {
'Items': {
create: function(options) {
console.log('Inside Mapping Item');
return new ChildModel(options.data);
}
},
'Value': {
create: function(options){
console.log('Inside Mapping Value');
return new ChildModel(options.data);
}
}
};
$(document).ready(function () {
var jsonData = {"Items":[{"Value":[{"Value1":"1","Value2":"2"},{"Value1":"3","Value2":"4"}]},{"SelectedOption":["Item2"],"Value":[{"Value1":"5","Value2":"6"},{"Value1":"7","Value2":"8"},{"Value1":"9","Value2":"10"}]}]};
var viewModel = new MainModel(jsonData);
ko.applyBindings(viewModel);
});
function ValueModel() {
var self = this;
self.Value1 = ko.observable();
self.Value2 = ko.observable();
}
function ChildModel(data) {
var self = this;
self.SelectedOption = ko.observable();
self.Value = ko.observableArray([]);
if(data != null)
{
console.log(data);
ko.mapping.fromJS(data,mapping,self);
}
self.AddValue = function () {
self.Value.push(new ValueModel());
}
}
function MainModel(data) {
var self = this;
self.Items = ko.observableArray([]);
if(data != null)
{
console.log('Inside Main Model');
console.log(data);
ko.mapping.fromJS(data,mapping, self);
}
self.dropDownItem = ko.observableArray(['Item1', 'Item2', 'Item3', 'Item4']);
self.AddItem = function () {
self.Items.push(new ChildModel());
}
}发布于 2014-11-23 20:39:42
我已经修改了你的小提琴,添加了“映射”防御和其他一些变化(我害怕失去来源,因此我张贴在这里)。
最主要的是
var mapping = {
'Item': {
create: function(options) {
return new ChildModel(options.data);
}
}
} 映射插件将被迫使用特定的对象创建函数,然后反序列化cild模型。
标记:
<h2>Nested</h2>
<table cellpadding="10" cellspacing="5" style="padding:10px;">
<tbody data-bind="foreach: Item">
<tr >
<td>
<select data-bind="options: $root.dropDownItem, selectedOptions: $data.SelectedOption && SelectedOption() || ''"></select>
</td>
<td>
<input type="button" data-bind="click: AddValue" value="Add Value" />
</td>
<td>
<table data-bind="foreach: Value">
<tr>
<td><input type="text" data-bind="value: Value1" /></td>
<td><input type="text" data-bind="value: Value2"/></td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
<div>
<input type="button" value="Add Item" data-bind="click: AddItem" />
</div>
<div>
<span data-bind="text: ko.toJSON(Item)"></span>
</div>代码:
$(document).ready(function () {
var jsonData = {"Item":[{"Value":[{"Value1":"1","Value2":"2"},{"Value1":"3","Value2":"4"}]},{"SelectedOption":["Item2"],"Value":[{"Value1":"5","Value2":"6"},{"Value1":"7","Value2":"8"},{"Value1":"9","Value2":"10"}]}]};
var mapping = {
'Item': {
create: function(options) {
return new ChildModel(options.data);
}
}
}
var viewModel = new MainModel();
viewModel.Item(ko.mapping.fromJS(jsonData, mapping).Item());
ko.applyBindings(viewModel);
});
function ValueModel() {
var self = this;
self.Value1 = ko.observable();
self.Value2 = ko.observable();
}
function ChildModel() {
var self = this;
self.SelectedOption = ko.observable();
self.Value = ko.observableArray([new ValueModel()]);
self.AddValue = function () {
self.Value.push(new ValueModel());
}
}
function MainModel() {
var self = this;
self.Item = ko.observableArray([]);
init();
function init() {
self.Item.push(new ChildModel());
}
self.dropDownItem = ko.observableArray(['Item1', 'Item2', 'Item3', 'Item4']);
self.AddItem = function () {
self.Item.push(new ChildModel());
}
}希望能帮上忙。
https://stackoverflow.com/questions/27091175
复制相似问题