使用knockout.js将数组绑定到视图模型
binding an array to a view model using knockout.js
有没有一种方法可以定义数组并将其绑定到视图模型?还是必须将其定义为对象?:
----js----
var arr=[{"id":"1","desc":"2","enabled":true,"tabStr":"/2***"},{"id":"2","desc":"2中","enabled":true,"tabStr":"1-60/2***"},{"id":"3","desc":"%3","enabled":false,"tabStr":"/5***"}];$(document).ready(function){ko.applyBindings(arr);});
-----html----
<tbody data-bind="foreach: ???">
<tr>
<td data-bind="text: id"></td>
<td data-bind="text: desc"></td>
<td data-bind="text: tabStr"></td>
<td data-bind="text: enabled"></td>
</tr>
</tbody>
如果您不想将数组包装在对象中,那么您可以使用特殊的上下文变量$data
(或$root
,因为这是顶级视图模型)来绑定当前数据。所以,你的绑定看起来像:
<tbody data-bind="foreach: $data">
<tr>
<td data-bind="text: id"></td>
<td data-bind="text: desc"></td>
<td data-bind="text: tabStr"></td>
<td data-bind="text: enabled"></td>
</tr>
</tbody>
您可以在此处找到有关上下文变量的更多信息:http://knockoutjs.com/documentation/binding-context.html
我使用MVC而不是"arr",所以我使用Model
(我留下了我将使用的版本为"arr),并在视图的顶部有一个@using IEnumerable<MyViewModel>
,我让控制器做一些类似的事情:
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/
相关文章:
- 如何在视图模型contet更新更新上调用Jquery函数
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 在MVVM视图模型中处理应用程序范围的元素
- 将c#视图模型转换为javascript模型时转义HTML标记
- 使用knockout.js将数组绑定到视图模型
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 聚合物:在不同的视图模型中多次使用元素
- 使用AMD时未定义淘汰组件视图模型
- 如何在Knockout.js中选中复选框时更新视图模型及其依赖项
- 无法将对象列表从视图模型设置为 javascript 变量
- 挖空视图模型函数仅影响最后一个实例
- 挖空.js嵌套视图模型不起作用
- 为什么我的视图模型不起作用
- 挖空、视图模型位于其他对象和数据绑定中
- 如何将经度/经度值绑定到挖空视图模型方法
- 挖空.js:等待视图模型实例化完成
- 在Knockout视图模型中调用jQuery插件是一种有效的模式
- KnockoutJS:如何避免在applyBindings上运行视图模型函数
- 使用knockoutjs操作视图模型
- Kendo UI自定义验证不适用于模板和视图模型