在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合
2014-11-03 10:58
232 查看
本篇体验使用
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 allProducts
select new {name = p.Name, category = p.Category};
return Json(result, JsonRequestBehavior.AllowGet);
}
总结:使用foreach绑定需要一个提供集合属性的View Model,通过ko.observableArray()让集合属性具有Observable。
相关文章推荐
- 在ASP.NET MVC中使用Knockout实践09,自定义绑定
- 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法
- 在ASP.NET MVC中使用Knockout实践01,绑定Json对象
- 在ASP.NET MVC中使用Knockout实践05,基本验证
- 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证
- ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定
- 在ASP.NET MVC中使用Knockout实践03,巧用data参数
- 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容
- 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容
- ASP.NET MVC DropDownList数据绑定及使用详解
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 1
- ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用
- 【翻译】使用Knockout, Web API 和 ASP.Net Web Forms 进行简单数据绑定
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
- 使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
- Asp.net MVC中提交集合对象,实现Model绑定
- asp.net mvc源码分析-DefaultModelBinder 集合绑定
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 5 - 数据库设计
- [ASP.NET MVC 小牛之路]08 - Area 使用
- 如何应用Asp.Net Mvc内建功能(DefaultModelBinder)实现简单类型、复杂类型、集合类型,以及字典类型的自动绑定