我在C#上的viewmodel看起来像这样 -
public class Level1Child
{
public int id;
public string name;
}
public class Parent
{
public string name;
public List<Level1Child> Level1Children { get; set; }
}
public class Test
{
public Parent Parent { get; set; }
}
这是我尝试创建viewmodel映射的方式 -
$.getJSON('Test/GetData/', null, function (value) {
data = value;
function Level1ChildViewModel(data) {
var self = this;
self.name = ko.observable(data.name);
}
function TestViewModel(data) {
var self = this;
self.Parent = function (data) {
this.name = data.name;
this.children = ko.observableArray([]);
if (this.children !== null) {
var mappedObjects = $.map(data.Level1Children, function (eachSingleObject) {
return new Level1ChildViewModel(eachSingleObject);
});
self.children(mappedObjects);
}
};
}
var myvm = new TestViewModel(data);
ko.applyBindings(myvm);
});
这就是我试图创建视图的方式 -
<span data-bind="text: name"></span>
<!-- ko foreach: children -->
<span data-bind="text: name"></span>
<!-- /ko -->
但是在执行时,我收到错误 - 儿童未定义。 有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
因为TestViewModel实例不包含子属性。 为什么?因为此实例有一个名为Parent的方法(创建子数组),但从不调用此方法。
我认为你可以简化如下:
function TestViewModel(data) {
var self = this;
self.name = data.name;
self.children = ko.observableArray([]);
var mappedObjects = $.map(data.Level1Children, function (eachSingleObject) {
return new Level1ChildViewModel(eachSingleObject);
});
self.children(mappedObjects);
}