使用Knockout,当通过构造函数创建View Model的时候,构造函数的参数个数很可能是不确定的,于是就有了这样的一个解决方案:向构造函数传递一个object类型的参数data。

  1. <input data-bind="value: name"/><hr/>
  2.  
  3. <select data-bind="options: categories, value: category" ></select><hr/>
  4.  
  5. @section scripts
  6.  
  7. {
  8.  
  9.     <script src="~/Scripts/knockout-2.2.0.js"></script>
  10.  
  11.     <script type="text/javascript">
  12.  
  13.         $(function() {
  14.  
  15.             $.getJSON('@Url.Action("GetFirstProduct","Home")', function (data) {
  16.  
  17.                 product.name(data.Name);
  18.  
  19.                 product.category (data.Category);
  20.  
  21.             });
  22.  
  23.         });
  24.  
  25.         var categories = ["小说", "散文", "传记"];
  26.  
  27.         var Product = function (data) {
  28.  
  29.             data = data || {};
  30.  
  31.             this.name = ko.observable();
  32.  
  33.             this.category = ko.observable();
  34.  
  35.             this.categories = categories;
  36.  
  37.             this.initialize(data);
  38.  
  39.         };
  40.  
  41.         ko.utils.extend(Product.prototype, {
  42.  
  43.             initialize: function(data) {
  44.  
  45.                 this.name(data.name);
  46.  
  47.                 this.category(data.category);
  48.  
  49.             }
  50.  
  51.         });
  52.  
  53.         var product = new Product({
  54.  
  55.             name: "默认值",
  56.  
  57.             category: "传记"
  58.  
  59.         });
  60.  
  61.         //绑定
  62.  
  63.         ko.applyBindings(product);
  64.  
  65.     </script>
  66.  
  67. }
  68.  

以上,通过构造函数创建Product的时候,只用到了一个参数,data。在实例化Product的时候,给Product各个成员赋默认值。另外,还为Product的原型添加了一个扩展方法,用于初始化。

当页面加载完毕,向控制器发送异步请求,返回给Product的值不是初始值。

如果想返回到Product初始值的状态,如何做到呢?

可以分3步完成:
1、给Product增加一个属性origionData,用来存放初始状态
2、给Product的原型添加一个扩展方法,用来返回到初始状态,即把origionData属性值作为初始化方法的参数
3、在页面上添加一个按钮,绑定Product的扩展方法

  1. <input data-bind="value: name"/><hr/>
  2.  
  3. <select data-bind="options: categories, value: category" ></select><hr/>
  4.  
  5. <button data-bind="click:revert">返回初始状态</button>
  6.  
  7. @section scripts
  8.  
  9. {
  10.  
  11.     <script src="~/Scripts/knockout-2.2.0.js"></script>
  12.  
  13.     <script type="text/javascript">
  14.  
  15.         $(function() {
  16.  
  17.             $.getJSON('@Url.Action("GetFirstProduct","Home")', function (data) {
  18.  
  19.                 product.name(data.Name);
  20.  
  21.                 product.category (data.Category);
  22.  
  23.             });
  24.  
  25.         });
  26.  
  27.         var categories = ["小说", "散文", "传记"];
  28.  
  29.         var Product = function (data) {
  30.  
  31.             data = data || {};
  32.  
  33.             this.name = ko.observable();
  34.  
  35.             this.category = ko.observable();
  36.  
  37.             this.categories = categories;
  38.  
  39.             this.origionData = data;
  40.  
  41.             this.initialize(data);
  42.  
  43.         };
  44.  
  45.         ko.utils.extend(Product.prototype, {
  46.  
  47.             initialize: function(data) {
  48.  
  49.                 this.name(data.name);
  50.  
  51.                 this.category(data.category);
  52.  
  53.             },
  54.  
  55.             revert: function() {
  56.  
  57.                 this.initialize(this.origionData);
  58.  
  59.             }
  60.  
  61.         });
  62.  
  63.         var product = new Product({
  64.  
  65.             name: "默认值",
  66.  
  67.             category: "传记"
  68.  
  69.         });
  70.  
  71.         //绑定
  72.  
  73.         ko.applyBindings(product);
  74.  
  75.     </script>
  76.  
  77. }
  78.  


点击"返回初始状态"按钮,回到Product的初始状态。

总结:使用构造函数创建View Model,当构造函数的参数数量不确定的情况下,可考虑使用data作为参数。

在ASP.NET MVC中使用Knockout实践03,巧用data参数的更多相关文章

  1. 在ASP.NET MVC中使用Knockout实践01,绑定Json对象

    本篇体验在ASP.NET MVC下使用Knockout,将使用EF Code First创建数据库.最后让Knockout绑定一个Json对象. 创建一个领域模型. namespace MvcAppl ...

  2. 在ASP.NET MVC中使用Knockout实践09,自定义绑定

    Knockout真正强大之处在于绑定机制,通过data-bind属性值体现绑定,不仅可以绑定值,还可以绑定事件,甚至可以自定义绑定. 从一个例子看Knockou的绑定机制 假设想给一个button元素 ...

  3. 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容

    在前两篇中,体验了Knockout的基本验证和自定义验证.本篇自定义验证信息的显示位置与内容. 自定义验证信息的显示位置 通常,Knockout的验证信息紧跟在input后面,通过validation ...

  4. 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证

    在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证. 自定义验证规则 ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集 ...

  5. 在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合

    本篇体验使用 foreach 绑定一个Product集合. 首先使用构造创建一个View Model. var Product = function(data) { this.name = ko.ob ...

  6. 在ASP.NET MVC中使用Knockout实践05,基本验证

    本篇体验View Model验证.Knockout的subscribe方法能为View Model成员注册验证规则. @{ ViewBag.Title = "Index"; Lay ...

  7. 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容

    通常,需要把View Model转换成json格式传给服务端.但在很多情况下,View Model既会包含字段,还会包含方法,我们只希望把字段相关的键值对传给服务端. 先把上一篇的Product转换成 ...

  8. 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法

    本篇体验使用ko.computed(fn)计算.组合View Model成员.Select元素的绑定.使用构造器创建View Model.通过View Model的原型(Prototype)为View ...

  9. [摘]在ASP.NET MVC中使用DropDownList

    在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法.在View中,包含一个类型为HtmlHelper的属性H ...

随机推荐

  1. RESTful 个人理解总结【转】

    转自:http://www.cnblogs.com/wang-yaz/p/9237981.html 一.什么是RESTful 面向资源 简单的说:RESTful是一种架构的规范与约束.原则,符合这种规 ...

  2. linux磁盘空间查看inode

    服务器一般是要求长期连续运行的,自动执行任务生成的各种文件及日志,可能使空间占满,从而造成业务故障,所以要定时清理. 一般来说,Linux空间占满有如两种情况: 1.空间被占满了 用df -k 可以看 ...

  3. tensorflow函数(2)

    并行计算能让代价大的算法计算加速执行,TensorFlow也在实现上对复杂操作进行了有效的改进.大部分核相关的操作都是设备相关的实现,比如GPU.下面是一些重要的操作/核: 操作组 操作 Maths ...

  4. jTessBoxEditor工具进行Tesseract3.02.02样本训练

    1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语 ...

  5. yum命令简介

    yum 一些较常见的用法 命令 功能 yum check-update 检查可更新的所有软件包 yum update 下载更新系统已安装的所有软件包 yum upgrade 大规模的版本升级,与yum ...

  6. 一步一步学习IdentityServer3 (1)

    学习之初: IdentityServer3我自己最开始了解到的就是做一个SSO单点登录,后面发现还有单独的认证服务功能,其实它还可以做APIs的访问控制,资源授权,另外还可以为提供第三方登录,其他的自 ...

  7. Authentication(Spring Security 认证笔记)

    这篇文章是对Spring Security的Authentication模块进行一个初步的概念了解,知道它是如何进行用户认证的 考虑一个大家比较熟悉的标准认证过程: 1.用户使用username和pa ...

  8. MVC插件

    MVC插件 最近领导让我搞一下插件化,就是实现多个web工程通过配置文件进行组装.之前由于做过一个简单的算是有点经验,当时使用的不是area,后来通过翻看orchard源码有点启发,打算使用area改 ...

  9. 2018 Arab Collegiate Programming Contest (ACPC 2018) H - Hawawshi Decryption 数学 + BSGS

    H - Hawawshi Decryption 对于一个给定的生成数列 R[ 0 ] 已知, (R[ i - 1 ] * a + b) % p = R[ i ] (p 是 质数), 求最小的 x 使得 ...

  10. Django -- settings 详解(转)

    Django -- settings 详解   Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目 ...