「arr」の代わりに、MVC を使用するのでModel
(「arr」として使用するバージョンを残しました)、@using IEnumerable<MyViewModel>
ビューの上部に a があり、次のようなコントローラーがあります。
public ActionResult Index() {
var data = myDataContext.SomeTable.Where(e => e.blah == "Foo");
return View(data);
}
そして、これはあなたのようなものを返すarr
ので、以下の私のコードはうまくいくはずです:
<table border="1" width="100%" data-bind="foreach: mainArray">
<tr>
<td width="25%">ID</td>
<td width="25%">Desc</td>
<td width="25%">Enabled</td>
<td width="25%">TabStr</td>
</tr>
<tr>
<td width="25%" data-bind="text: id"></td>
<td width="25%" data-bind="text: desc"></td>
<td width="25%" data-bind="text: tabStr"></td>
<td width="25%" data-bind="text: enabled"></td>
</tr>
</table>
<script language="type/Javascript">
var arr = [{"id":"1","desc":"1","enabled":true,"tabStr":"2"},
{"id":"2","desc":"2","enabled":true,"tabStr":"1-60"},
{"id":"3","desc":"3","enabled":false,"tabStr":"5"}];
//var arr = [@Html.Raw(Json.Encode(Model))][0];
$(function () {
var myViewModel = new MyViewModel(arr);
ko.applyBindings(myViewModel);
function MyViewModel(arr) {
var self = this;
self.mainArray = ko.observableArray([]);
if (arr.length > 0) {
for (var i=0; i<arr.length; i++) {
var myDataViewModel = new MyDataViewModel(arr[i]);
self.mainArray.push(myDataViewModel);
}
}
}
function MyDataViewModel(vm) {
//alert(vm.id);
var self = this;
if (vm != null) {
self.id = ko.observable(vm.id);
self.desc = ko.observable(vm.desc);
self.enabled = ko.observable(vm.enabled);
self.tabStr = ko.observable(vm.tabStr);
} else {
self.id = 0;
self.desc = 0;
self.enabled = true;
self.tabStr = 0;
}
}
});
</script>
JSFiddle の作業はこちら: http://jsfiddle.net/navyjax2/y75hcr2L/