在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合
本篇体验使用 foreach 绑定一个Product集合。
首先使用构造创建一个View Model。
var Product = function(data) {this.name = ko.observable(data.name);this.category = ko.observable(data.category);};
由于是从服务端返回json数据,待会服务端返回Products集合的时候,可以构建一个key为name和category的json格式。
而foreach需要绑定的是集合,我们还需要创建一个View Model,该View Model有一个集合属性。
var RealVM = function(products) {var productsArr = [];for (var i = 0; i < products.length; i++) {var product = new Product(products[i]);productsArr.push(product);}this.products = ko.observableArray(productsArr);};
接着,向服务端发送异步请求,返回的Prduct集合作为RealVM构造函数的实参。
$.getJSON('@Url.Action("GetProducts","Home")', function(data) {var vm = new RealVM(data);ko.applyBindings(vm);});
前端完整代码如下:
@{ViewBag.Title = "Index";Layout = "~/Views/Shared/_Layout.cshtml";}<table><thead><tr><th>名称</th><th>类别</th></tr></thead><tbody data-bind="foreach:products"><tr><td data-bind="text: name"></td><td data-bind="text: category"></td></tr></tbody></table>@section scripts{<script src="~/Scripts/knockout-3.2.0.js"></script><script src="~/Scripts/knockout.validation.js"></script><script src="~/Scripts/zh-CN.js"></script><script type="text/javascript">//使用构造函数定义View Model,用data作为参数var Product = function(data) {this.name = ko.observable(data.name);this.category = ko.observable(data.category);};var RealVM = function(products) {var productsArr = [];for (var i = 0; i < products.length; i++) {var product = new Product(products[i]);productsArr.push(product);}this.products = ko.observableArray(productsArr);};//页面加载完毕向服务端发送异步请求$(function () {$.getJSON('@Url.Action("GetProducts","Home")', function(data) {var vm = new RealVM(data);ko.applyBindings(vm);});});</script>}
HomeController相关代码为:
static readonly IProductRepository repository = new ProductRepository();public JsonResult GetProducts(){var allProducts = repository.GetAll();var result = from p in allProductsselect new {name = p.Name, category = p.Category};return Json(result, JsonRequestBehavior.AllowGet);}

总结:使用foreach绑定需要一个提供集合属性的View Model,通过ko.observableArray()让集合属性具有Observable。
在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合的更多相关文章
- 在ASP.NET MVC中使用Knockout实践09,自定义绑定
Knockout真正强大之处在于绑定机制,通过data-bind属性值体现绑定,不仅可以绑定值,还可以绑定事件,甚至可以自定义绑定. 从一个例子看Knockou的绑定机制 假设想给一个button元素 ...
- 在ASP.NET MVC中使用Knockout实践01,绑定Json对象
本篇体验在ASP.NET MVC下使用Knockout,将使用EF Code First创建数据库.最后让Knockout绑定一个Json对象. 创建一个领域模型. namespace MvcAppl ...
- 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容
在前两篇中,体验了Knockout的基本验证和自定义验证.本篇自定义验证信息的显示位置与内容. 自定义验证信息的显示位置 通常,Knockout的验证信息紧跟在input后面,通过validation ...
- 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证
在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证. 自定义验证规则 ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集 ...
- 在ASP.NET MVC中使用Knockout实践05,基本验证
本篇体验View Model验证.Knockout的subscribe方法能为View Model成员注册验证规则. @{ ViewBag.Title = "Index"; Lay ...
- 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容
通常,需要把View Model转换成json格式传给服务端.但在很多情况下,View Model既会包含字段,还会包含方法,我们只希望把字段相关的键值对传给服务端. 先把上一篇的Product转换成 ...
- 在ASP.NET MVC中使用Knockout实践03,巧用data参数
使用Knockout,当通过构造函数创建View Model的时候,构造函数的参数个数很可能是不确定的,于是就有了这样的一个解决方案:向构造函数传递一个object类型的参数data. <inp ...
- 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法
本篇体验使用ko.computed(fn)计算.组合View Model成员.Select元素的绑定.使用构造器创建View Model.通过View Model的原型(Prototype)为View ...
- [摘]在ASP.NET MVC中使用DropDownList
在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法.在View中,包含一个类型为HtmlHelper的属性H ...
随机推荐
- 【坐在马桶上看算法】算法4:队列——解密QQ号
新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的.所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则. ...
- 003_cd pushd popd三个命令的区别
一. It depends. In zsh you can configure cd to push the old directory on the directory stack automati ...
- 使用管道和cronolog切割日志
安装cronolog git clone https://github.com/fordmason/cronolog ./configure make && make install ...
- 解决cef中title不现实tooltip的问题
本文转自:https://blog.csdn.net/hu1340748/article/details/79030569 感谢感谢 最近在使用chromiumFX做项目,突然发现页面标签中的titl ...
- ASP.NET MVC 路由学习
参考 http://www.cnblogs.com/yaozhenfa/p/asp_net_mvc_route_2.html 说明 1."解决与物理路径的冲突"这段教程这里如果不起 ...
- AndroidManifest.xml中android:configChanges的简介
程序在运行时,一些设备的配置可能会改变,如:横竖屏的切换.键盘的可用性等,这样的事情一发生,Activity会重新启动,其中的过程是:在销毁之前会先 called onSaveInstanceStat ...
- 《Java多线程编程核心技术》学习笔记
第2章 对象及变量的并发访问 2.1 synchronized同步方法 方法内的变量为线程安全: 方法内部的变量是线程私有的 方法中有一个变量num,后面对它赋值 两个线程同时调用这个方法,对其赋不同 ...
- Webpack按需加载一切皆模块
前言 在学习 Webpack 之前,我们需要了解一个概念:模块. 何为模块? 如果你曾学过 Java , C# 之类的语言,一定会知道 Java 中的 import 或 C# 中的 using 吧? ...
- [教程] Spring+Mybatis环境配置多数据源
一.简要概述 在做项目的时候遇到需要从两个数据源获取数据,项目使用的Spring + Mybatis环境,看到网上有一些关于多数据源的配置,自己也整理学习一下,然后自动切换实现从不同的数据源获取数据功 ...
- 链表用途&&数组效率&&链表效率&&链表优缺点
三大数据结构的实现方式 数据结构 实现方式 栈 数组/单链表 队列 数组/双端链表 优先级队列 数组/堆/有序链表 双端队列 双向链表 数组与链表实现方式的比较 数组与链表都很快 如果能精确预测栈 ...