我是KnockoutJS新手。
我有一个下面写的视图,无法在运行时看到每个类别的categoryVariables。 你能看看并说出这里有什么问题吗?
感谢您的帮助。
我的代码视图:
<table class="table">
<thead>
</thead>
<tbody data-bind="foreach: categories">
<tr>
<td data-bind="text: Name">
<table>
<tbody data-bind="foreach: categoryVariables">
<tr>
<td data-bind="text: Name"></td>
</tr>
</tbody>
</table>
</td>
<td><button data-bind='click: $root.addCategoryVariable'>Add a category variable</button></td>
</tr>
</tbody>
</table>
<button data-bind='click: addCategory'>Add a category</button>
<script type="text/javascript">
var resumeDataViewModel;
function Category(data) {
var self = this;
self.ID = data.ID;
self.Name = data.Name;
self.categoryVariables = ko.observableArray([
new CategoryVariable({ID: '1', Name: 'asd'})
]);
}
function CategoryVariable(data) {
var self = this;
self.ID = data.ID;
self.Name = data.Name;
}
function ResumeDataViewModel() {
var self = this;
self.categories = ko.observableArray([
new Category({ID: '1', Name : 'Contact', Category: {ID: '1', Name: 'gfdg'}}),
new Category({ID: '2', Name : 'Education', Category: {ID: '2', Name: 'asdasd'}})
]);
self.addCategory = function(){
self.categories.push(new Category({
Name: "sa d"
}));
}
self.addCategoryVariable = function (category) {
category.categoryVariables.push(new CategoryVariable({
Name: 'asd'
}));
}
}
ko.applyBindings(resumeDataViewModel = new ResumeDataViewModel());
</script>
寻找你的回复。非常感谢你。
答案 0 :(得分:3)
您的问题是绑定文本:名称,然后将表添加到同一个td。我已将categoryVariables的表移动到单独的TD,它工作正常。
由于你绑定了TD的文本,Ko的数据绑定将覆盖你内在的任何其他内容,只需设置来自observable的文本。 如果您正在查看不同的UI布局,请相应地更改您的HTML,但请记住以上内容。
还要在KO文档中检查无容器绑定的使用和with绑定。这些可以帮助您创建更好的HTML布局。
检查这个小提琴:http://jsfiddle.net/7BNQy/
修改HTML:
<table class="table">
<thead>
</thead>
<tbody data-bind="foreach: categories">
<tr>
<td data-bind="text: Name">
</td>
<td>
<table>
<tbody data-bind="foreach: categoryVariables">
<tr>
<td data-bind="text: Name"></td>
</tr>
</tbody>
</table></td>
<td><button data-bind='click: $root.addCategoryVariable'>Add a category variable</button></td>
</tr>
</tbody>
</table>
<button data-bind='click: addCategory'>Add a category</button>