在ASP.NET MVC中使用Knockout实践03,巧用data参数
使用Knockout,当通过构造函数创建View Model的时候,构造函数的参数个数很可能是不确定的,于是就有了这样的一个解决方案:向构造函数传递一个object类型的参数data。
<input data-bind="value: name"/><hr/><select data-bind="options: categories, value: category" ></select><hr/>@section scripts{<script src="~/Scripts/knockout-2.2.0.js"></script><script type="text/javascript">$(function() {$.getJSON('@Url.Action("GetFirstProduct","Home")', function (data) {product.name(data.Name);product.category (data.Category);});});var categories = ["小说", "散文", "传记"];var Product = function (data) {data = data || {};this.name = ko.observable();this.category = ko.observable();this.categories = categories;this.initialize(data);};ko.utils.extend(Product.prototype, {initialize: function(data) {this.name(data.name);this.category(data.category);}});var product = new Product({name: "默认值",category: "传记"});//绑定ko.applyBindings(product);</script>}
以上,通过构造函数创建Product的时候,只用到了一个参数,data。在实例化Product的时候,给Product各个成员赋默认值。另外,还为Product的原型添加了一个扩展方法,用于初始化。
当页面加载完毕,向控制器发送异步请求,返回给Product的值不是初始值。

如果想返回到Product初始值的状态,如何做到呢?
可以分3步完成:
1、给Product增加一个属性origionData,用来存放初始状态
2、给Product的原型添加一个扩展方法,用来返回到初始状态,即把origionData属性值作为初始化方法的参数
3、在页面上添加一个按钮,绑定Product的扩展方法
<input data-bind="value: name"/><hr/><select data-bind="options: categories, value: category" ></select><hr/><button data-bind="click:revert">返回初始状态</button>@section scripts{<script src="~/Scripts/knockout-2.2.0.js"></script><script type="text/javascript">$(function() {$.getJSON('@Url.Action("GetFirstProduct","Home")', function (data) {product.name(data.Name);product.category (data.Category);});});var categories = ["小说", "散文", "传记"];var Product = function (data) {data = data || {};this.name = ko.observable();this.category = ko.observable();this.categories = categories;this.origionData = data;this.initialize(data);};ko.utils.extend(Product.prototype, {initialize: function(data) {this.name(data.name);this.category(data.category);},revert: function() {this.initialize(this.origionData);}});var product = new Product({name: "默认值",category: "传记"});//绑定ko.applyBindings(product);</script>}

点击"返回初始状态"按钮,回到Product的初始状态。
总结:使用构造函数创建View Model,当构造函数的参数数量不确定的情况下,可考虑使用data作为参数。
在ASP.NET MVC中使用Knockout实践03,巧用data参数的更多相关文章
- 在ASP.NET MVC中使用Knockout实践01,绑定Json对象
本篇体验在ASP.NET MVC下使用Knockout,将使用EF Code First创建数据库.最后让Knockout绑定一个Json对象. 创建一个领域模型. namespace MvcAppl ...
- 在ASP.NET MVC中使用Knockout实践09,自定义绑定
Knockout真正强大之处在于绑定机制,通过data-bind属性值体现绑定,不仅可以绑定值,还可以绑定事件,甚至可以自定义绑定. 从一个例子看Knockou的绑定机制 假设想给一个button元素 ...
- 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容
在前两篇中,体验了Knockout的基本验证和自定义验证.本篇自定义验证信息的显示位置与内容. 自定义验证信息的显示位置 通常,Knockout的验证信息紧跟在input后面,通过validation ...
- 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证
在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证. 自定义验证规则 ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集 ...
- 在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合
本篇体验使用 foreach 绑定一个Product集合. 首先使用构造创建一个View Model. var Product = function(data) { this.name = ko.ob ...
- 在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实践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 ...
随机推荐
- BAT修改文本内容
@echo off (for /f "delims=" %%a in (文件名) do ( set "str=%%a" setlocal enabledelay ...
- 【Hadoop】搭建完全分布式的hadoop【转】
转自:http://www.cnblogs.com/laov/p/3421479.html 下面博文已更新,请移步 ↑ 用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统 ...
- MySQL5.7 GTID在线开启与关闭【转】
当前场景 当前某些业务还有未开启GTID服务组,升级5.7后,如何检测是否符合开启GTID条件,如何在线修改切换使用GTID:已经升级5.7后,已经开启GTID,如何快速回滚后退: 线上gtid如 ...
- jquery easyui:tab自动加载第一个tab内容
$('#resourceTabs').tabs('unselect', 0);$('#resourceTabs').tabs('select', 0);
- testng运行失败,继续执行
1.重写断言类 public class Verify { public static StringBuffer verificationErrors= new StringBuffer();; pu ...
- Z字形变换
将字符串 "PAYPALISHIRING" 以 Z 字形排列成给定的行数: P A H N A P L S I I G Y I R 之后从左往右,逐行读取字符:"PAHN ...
- 【LOJ】#2080. 「JSOI2016」病毒感染
题解 那个限制表示一回头要治完前面的所有病人 我们处理一个g[i][j]表示治疗i到j的病人至少会死多少病人 \(g[i][j] = g[i + 1][j] + sum[i + 1,j] + min( ...
- CentOS 7 之 Docker 安装及操作命令
Docker 安装 官方网站上有各种环境下的安装指南,比如:CentOS.Ubuntu 和 Debian 系列的安装. 而我们现在主要介绍的是基于 CentOS 7.x 上面的安装. 1.查看是否已经 ...
- 洛谷P4742 [Wind Festival]Running In The Sky [Tarjan缩点,DAGDP]
题目传送门 Running In The Sky 格式难调,题面就不放了. 分析: 一句话题意:给定一张带点权的有向图,求最长点权路径及该路径上的最大点权. 很明显的$DAGDP$,因此需要缩点,将该 ...
- Spring中数据绑定的两种方式(BeanWrapperImpl或者DataBinder)
import org.apache.shiro.authc.AuthenticationToken; import org.springframework.beans.*; import org.sp ...