我刚刚开始学习KnockoutJS所以我可能错过了一些简单的东西,但这是我的问题。
下面是我的ClassType类
public class ClassType
{
[HiddenInput(DisplayValue = false)]
public int ID { get; set; }
[Required(ErrorMessage = "Please enter a description")]
public string Description { get; set; }
[Display(Name = "Class Slots")]
public int ClassSlots { get; set; }
}
我的控制器中有一个方法可以返回一个名为GetAll
的所有类型的列表public JsonResult GetAll()
{
var classtypes = classtypeRepository.All;
return Json(classtypes, JsonRequestBehavior.AllowGet);
}
在我看来,我有以下代码将数据加载到我的viewmodel
<script type="text/javascript">
$(document).ready(function () {
$.get("/ClassTypes/GetAll/", "", function (data) {
var viewModel = {
classtypes: ko.observableArray()
};
viewModel.classtypes = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
});
});
</script>
我已将以下div投入到我的视图中以确保返回某些内容
<div data-bind="text: ko.toJSON($data)"></div>
返回以下内容
{"classtypes":[{"ID":1,"Description":"Online","ClassSlots":30},{"ID":2,"Description":"In-House","ClassSlots":15},{"ID":3,"Description":"Hands-On","ClassSlots":10}]}
如果我尝试将任何东西绑定到视图模型,它似乎不理解属性
<tbody>
<!-- ko.foreach: classtypes -->
<tr>
<td></td>
<td data-bind="text: Description">
</td>
<td data-bind="text: ClassSlots">
</td>
</tr>
<!-- /ko -->
</tbody>
我使用knockoutJS映射插件来提供我认为会为我创建viewmodel结构的数据。我错过了什么?
答案 0 :(得分:1)
除了一件事,你的代码是正确的。
要从Array获取特定属性,您应该调用$data.YOUR_SPECIFIC_PROPERTY_NAME
HTML代码:
<table style="border: 1px solid #222;">
<tr data-bind="foreach: classtypes">
<td></td>
<td data-bind="text: $data.Description"></td>
<td data-bind="text: $data.ClassSlots"></td>
</tr>
</table>
Javascript代码
var ViewModel = function(data) {
var self = this;
self.classtypes = ko.observableArray(initialData);
};
var initialData = [{"ID":1,"Description":"Online","ClassSlots":30},
{"ID":2,"Description":"In-House","ClassSlots":15},
{"ID":3,"Description":"Hands-On","ClassSlots":10}];
ko.applyBindings(new ViewModel(initialData));
我也为你创建了jsFiddle Click here to see the DEMO
START UPDATE
它也适用于foreach评论,但你在ko.foreach
评论中有一个错字,实际上你应该将一个点('。')更改为空格(''),就像这个<!-- ko foreach -->
一样,这里也是是您正确的HTML代码:
<table style="border: 1px solid #222;">
<tbody>
<!-- ko foreach: classtypes -->
<tr >
<td></td>
<td data-bind="text: $data.Description"></td>
<td data-bind="text: $data.ClassSlots"></td>
</tr>
<!-- /ko -->
<tbody>
</table>
END UPDATE