学习YUI.Ext 第七天--关于View&JSONView


Posted in Javascript onMarch 10, 2007

展现一条一条的二维关系的数据,我们可以使用GIRD组件。 但有些场合,如产品展示,画册,我们可以使用View组件,来展示“矩阵”式的数据。 View的数据源来自DataModel对象,即包含XMLDataModel和JSONDataModel。尽管View支持JSON,但如果不是用于DataModel,View的子类JSONView更适用,因为它提供更多的事件和方法。一般来说,View用于XML数据源;JSONView用于JSON数据源。

View如何工作?

记得以前如何输出一个记录吗?以网上商店为例子;以前是这样输出一个商品的:

<%
		.....
		//下列服务端代码为ASP using JScript(依然是JS,I'm a big JS Fan^^)
		var str ="";
		str+="<td><div id='title'>";
		str+=rs("title")+"<\/div>";
		str+="<img src="+rs("thumb_image")+">";
		str+="<\/td>"
		Resposne.Write(str);
		.....
%>

很明显,我们最终目的还是要输出HTML,为浏览器渲染(Render)服务。View工作原理也一样,只不过把以前Sever做的事情搬到Cilent来,依靠View来处理(实质上是Domhelper的模版),让浏览器最终渲染输出。

需要你的帮忙:Domhelper

如上述,View的工作离不开DomHelpr。DomHelpr在这里提供"模版Template",并将其编译。见下面代码:

//新建一个Template对象
var tpl = new YAHOO.ext.Template(
 '<div class="entry">' + 
  '<a class="entry-title" href="{link}">{title}</a>' +
  '<h4>{date} by {author} | {comments} Comments</h4>{description}' +
 '</div><hr />'
);
tpl.compile(); //compile()的方法,可带来DOM性能的增益
var moreView = new YAHOO.ext.JsonView('entry-list', tpl, {
 jsonRoot: 'posts'
});
//又或者隐式创建Template对象
var view = new YAHOO.ext.View('my-element', 
   '<div id="{0}">{2} - {1}</div>', // auto create template
   dataModel, { 
    singleSelect: true, 
    selectedClass: 'ydataview-selected'
   });

 

加载数据

VIEW加载数据的方式与JSONView的有所不同:VIEW采用DataModel的load(),JSONView采用UpateManager的load()。下面重点说说JSONView的load()方法:

view.load({ url: 'your-url.php',
 params: {param1: 'foo', param2: 'bar'}, // 可以是URL encoded字符
 callback: yourFunction,
 scope: yourObject, //(optional scope) 
 discardUrl: false, 
 nocache: false,
 text: 'Loading...',//loading之提示文字
 timeout: 30,//超时
 scripts: false
 });

只有url参数是不可缺省的,其它如 nocache, text and scripts都是可选的。 text和scripts是与UpdateManger实例关联的参数

  • params : String/Object
    (optional) The parameters to pass as either a url encoded string "param1=1¶m2=2" or an object {param1: 1, param2: 2}
  • callback : Function
    (optional) Callback when transaction is complete - called with signature (oElement, bSuccess)
  • discardUrl : Boolean
    (optional) By default when you execute an update the defaultUrl is changed to the last used url. If true, it will not store the url.

JSONView使用点滴

a.有一个gird和JSONView,两者如何同时调用一个数据源?
1.改变jsonData属性; 2.Call refresh(); 见http://www.yui-ext.com/forum/viewtopic.php?t=1968

b.分页
分页视乎还没有什么好的方案,JACK只提供下面的思路:
JsonView extends View. View supports using a JSONDataModel. It won't render a paging toolbar for you, but it will loadPage() and standard DataModel functionality. The view will automatically update when you load new data. If you want named template parameters (like JsonView), you will need to remap the indexes (DataModel style) to named parameters. See the YAHOO.ext.View docs for more info on that.
http://www.yui-ext.com/forum/viewtopic.php?t=2340

c.如何JSONView的获取整个DataModel而不是字段?我每次用alert(mainView.jsonData); 结果是“undefined”
如果是获取DataModel,那应该用View对象。出现undefined的原因是load()是异步的,你必须先等待数据load完。如:

mainView.el.getUpdateManager().on('update', function(){ 
  alert(mainView.jsonData); 
});

详见http://www.yui-ext.com/forum/viewtopic.php?t=1209

 

d.学习例子。范例Image Chooser本身就是一个好的学习例子

JSON Format

您可能认为服务输出这样的JSON:

{"user": {"username": "Bob", "birthday": "1976-11-08", "join_date": "2006-08-01", "last_login": "2006-12-03"}}

是正确无误的。但不对,它是不能被处理的。正确的格式应该是:

{"user": [{"username": "Bob", "birthday": "1976-11-08", "join_date": "2006-08-01", "last_login": "2006-12-03"}]}

注意方括号内声明的是数组类型,View渲染方式实际是与DataModel一致的

最后,提供一幅Veiw的UML图

学习YUI.Ext 第七天--关于View&amp;JSONView
Javascript 相关文章推荐
getElementById在任意一款浏览器中都可以用吗的疑问回复
May 13 Javascript
JavaScript中Object和Function的关系小结
Sep 26 Javascript
js获取表格的行数和列数的方法
Oct 23 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
Jun 08 Javascript
JSONP和批量操作功能的实现方法
Aug 21 Javascript
React-intl 实现多语言的示例代码
Nov 03 Javascript
微信小程序实现打开内置地图功能【附源码下载】
Dec 07 Javascript
vue.js 添加 fastclick的支持方法
Aug 28 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
使用Angular material主题定义自己的组件库的配色体系
Sep 04 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
Sep 04 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 #Javascript
学习YUI.Ext第五日--做拖放Darg&amp;Drop
Mar 10 #Javascript
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 #Javascript
学习YUI.Ext 第三天
Mar 10 #Javascript
学习YUI.Ext 第二天
Mar 10 #Javascript
学习YUI.Ext基础第一天
Mar 10 #Javascript
JavaScript触发器详解
Mar 10 #Javascript
You might like
帅气的琦玉老师
2020/03/02 日漫
PHP数组相关函数汇总
2015/03/24 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
Yii 使用intervention/image拓展实现图像处理功能
2019/06/22 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
Django用户身份验证完成示例代码
2020/04/03 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
商务考察邀请函范文
2014/01/21 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
永不妥协观后感
2015/06/10 职场文书
运动会5000米加油稿
2015/07/21 职场文书