MVVM架构~Knockoutjs系列之js接收C#数据集合的方式
在controller里将数据拿到,并且存储到ViewBag对象里,最后在View上显示出来,这是传统的MVC开发方式,事实上引入Knockoutjs以后,这种方式还是适合的,Knockoutjs只是在前台数据绑定中做了一点调整,它不在依赖于后台具体数据,你完全可以在
最后去为它动态绑定数据,一般地,我们会为这种页面添加一个JS文件,用来获取数据,以实现前台开发人员与后台代码开发人员的分离。
从view层拿数据的方式有两种,第一是通过ViewBag,ViewData,TempData,Model等容器来存储,然后在View上直接取即可,而第二种方式是通过一个GET请求,它通常是异步的,你可以使用JQ里的getJSON,它可以方便的实现数据的获取工作,它对集合的支
持是比较好的。
方式一,通过ViewBag等容器实现的集合
var json =@Html.Raw(Json.Encode(ViewBag.Category));
这时,json变量已经是一个Json数组了,它将C#里的IEnumable集合转换成了JSON对象
方式二,通过getJSON等方式实现异步获取
注意,异步执行,它的意思是说,你的页面在一个ajax请求时,不会去等待它,而是直接执行下面的语句,这样,对于大数据量情况下,浏览器不会假死,用户体验会好一些,但有时,开发人员在写代码时,往往会掉到AJAX的陷阱中,看下面代码:
$.getJSON("http://localhost:2166/api/values/", function (data) {
var Cart = function () {
// Stores an array of lines, and from these, can work out the grandTotal
var self = this;
//self.lines = ko.observableArray([new CartLine()]);
self.lines = ko.observableArray(data);
// Operations
self.addLine = function () { self.lines.push(new CartLine()) };
self.removeLine = function (line) { self.lines.remove(line) };
}
}); ko.applyBindings(new Cart());
不仔细看,看不出问题,但一运行程序,问题就出来了,“从服务器那边获取不到数据”,这是为什么呢,明明有数据呀,这就是AJAX的陷阱了,你的 ko.applyBindings(new Cart())没有等待上面的取数据完,就输出了,所以,什么都没有,下面是正常的代码
你可以对比一下:
$.getJSON("http://localhost:2166/api/values/", function (data) {
var Cart = function () {
// Stores an array of lines, and from these, can work out the grandTotal
var self = this;
//self.lines = ko.observableArray([new CartLine()]);
self.lines = ko.observableArray(data);
// Operations
self.addLine = function () { self.lines.push(new CartLine()) };
self.removeLine = function (line) { self.lines.remove(line) };
}
ko.applyBindings(new Cart());
});
怎么样,只是代码的位置不同,结果就完全不同吧,呵呵!所以说,我们对问题的理解程度,有时,应该有一种“模棱两不可”的精神!
MVVM架构~Knockoutjs系列之js接收C#数据集合的方式的更多相关文章
- MVVM架构~knockoutjs系列之表单添加(验证)与列表操作源码开放
返回目录 本文章应该是knockoutjs系列的最后一篇了,前几篇中主要讲一些基础知识,这一讲主要是一个实际的例子,对于一个对象的添加与编辑功能的实现,并将项目源代码公开了,共大家一起学习! knoc ...
- MVVM架构~Knockoutjs系列之验证机制的引入
返回目录 对于Knockoutjs本身来说,没有提供验证模块,不过,有第三方的扩展,就像你为jquery库作extensions一样,这讲中我将介绍一个Knockout插件扩展,knockout.va ...
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...
- MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength
返回目录 为什么要对minLength和maxLength这两个方法进行扩展呢,是因为这样一个需求,在用户注册时,可以由用户自己决定他们输入的字符,中文,英文,数字均可,这样做了之后,使用户的体验更好 ...
- MVVM架构~Knockoutjs系列之text,value,attr,visible,with的数据绑定
返回目录 Knockoutjs是微软mvc4里一个新东西,用这在MVC环境里实现MVVM,小微这次没有大张旗鼓,而是愉愉的为我们开发者嵌入了一个实现MVVM的插件,这下面的几篇文章中,我和大家将一起去 ...
- MVVM架构~Knockoutjs系列之对象与对象组合
返回目录 在面向对象的程序设计里,对象是核心,一切皆为对象,对象与对象之间的关系可以表现为继承和组合,而在Knockoutjs或者JS里,也存在着对象的概念,今天主要说一下JS里的对象及对象的组合. ...
- MVVM架构~knockoutjs系列之正则表达式使规则更灵活
返回目录 几乎每种验证架构都会有正则表达式的加盟,一般地,一种验证架构首先会提供一些标准的,常用的验证规则,它们通常是数字验证,电话验证,email验证,长度验证,范围验证,日期验证等,而如果使你的验 ...
- MVVM架构~knockoutjs系列之级联select
返回目录 对于下拉列表框的绑定在之前的knockoutjs文章中已经介绍过,今天主要说一下级联的select,事实上,在knockoutjs里,是以数据绑定为中心的,而数据是以面向对象为前提的,而对于 ...
- MVVM架构~knockoutjs系列之包括区域级联列表的增删改
返回目录 这个例子我做了几次,之前总是有BUG,目前测试后,确定没有BUG才发上来的,主要功能是实现“我的银行”模块的增删改的功能,这个里面包括了级联列表的区域选择,这部分是难点,在开发过程中,我们应 ...
随机推荐
- Hibernate和Jpa的关系
http://blog.sina.com.cn/s/blog_5f1619e80100yoxz.html Jpa是规范,Hibernate是实现,使用Hibernate的时候一定会使用到Jpa
- 图片预加载和AJAX的图片预加载
利用js实现图片预加载,加载所需要图片的路径与名称即可,很容易实现,该方法尤其适用预加载大量的图片: <div class="hidden"> <script t ...
- bash快捷建
bash快捷建 ctrl键组合ctrl+a:光标移到行首.ctrl+b:光标左移一个字母ctrl+c:杀死当前进程.ctrl+d:退出当前 Shell.ctrl+e:光标移到行尾.ctrl+h:删除光 ...
- 猿团YTFCloud--5分钟自制APP,开发从未如此简单
9月15日,YTFCloud将正式开启内测, 这意味着猿团YTF框架产品线全面升级.同时,公测过后,YTFCloud的APP线上DIY服务将面向所有用户,让人人都能成为APP“开发商”. 什么是YTF ...
- I2C VHDL程序
http://blog.sina.com.cn/s/blog_9bd80b7601012o9y.html library ieee ; use ieee.std_logic_1164.all ; us ...
- [UCSD白板题] Compute the Edit Distance Between Two Strings
Problem Introduction The edit distinct between two strings is the minimum number of insertions, dele ...
- iOS-三方框架AFNetworking基本使用
AFNetworking 是基于NSURLConnection, NSOperation开发的一款三方框架,主要用于处理一些关于网络请求上的业务,下文会简单介绍框架中经常使用的功能,如文件的上传,下载 ...
- MongoDB学习比较-07 C#驱动操作MongoDB
下载驱动 驱动的下载有两种方式:一种是在C#项目中通过NuGet进行安装,另一种是通过下面的链接:https://github.com/mongodb/mongo-csharp-driver/rele ...
- selenium 富文本框处理
selenium 富文本框处理, 网上有用API的解决方法1:参见:http://blog.csdn.net/xc5683/article/details/8963621 群里1位群友的解决方法2:参 ...
- codeforces 484E
题意:给定n<=105的数组h,有m<=105的询问,每个询问为l,r,w求[l,r]区间内连续w个的最小高度最大是多少.. 思路:首先把h数组从大到小排序,然后用建立一个可持久化的下标线 ...