學(xué)習(xí)YUI.Ext第七日-View&JSONView Part Two-一個畫室網(wǎng)站的案例
之前在Part 1簡單介紹了Veiw和JSONView。今天這里小弟為大家說說應(yīng)用的案例,原本Jack的Image Chooser是一個非常好的案例,當(dāng)中包含Jack大量的技巧,不過正因為這樣,過于深奧,小弟我亦不能全盤吃透,只挑其“勃大莖深”之處,與君共勉之!
本文包含四大知識點:1.在LayoutDialog中加入Tabs;2.View的使用方式;3.JSONView的使用方式;4.獲取XML/JSON的fields值與分頁
【View之定義】
A View is generally used to build a quick template-based display of datamodel, rather than building a more complex grid. I thnk there's a blog post that illustrates doing this with JSON data. Templates can be used for any repetitious html creation, not necessarily tied to a datamodel.
主要的意思是View用于展示DataModel的數(shù)據(jù),Part 1已經(jīng)說過。這里是來自fourm某君的補充。
代碼點評:
1.先看一段簡單的
//用yui.ext做翻轉(zhuǎn)按鈕, super easy(美工最愛!?^^) showBtn = getEl('showIntro'); showBtn.on('click', this.showDialog, this, true); showBtn.applyStyles("cursor:pointer"); showBtn.on('mouseover', function(){showBtn.dom.src='images/over_10.gif'}, this, true); showBtn.on('mouseout', function(){showBtn.dom.src='images/btn_10.gif'}, this, true);
//左邊動畫效果,createDelegate()負(fù)責(zé)輪換效果 var luo=getEl("left_pic"); luo.move('right', 250, true, .1, function(){ luo.dom.src='images/'+who+".gif"; luo.move('left', 250, true, .15, null, YAHOO.util.Easing.easeOutStrong); }.createDelegate(this));
2.在LayoutDialog中加入Tabs
LayoutDialong分兩個區(qū)域:west & center。而center之中我們要加入tabs,并逐一附加active的事件
var center = layout.getRegion('center'); var tab1 = new YAHOO.ext.ContentPanel('luo', {title: '羅老師作品'}); center.add(tab1); center.add(new YAHOO.ext.ContentPanel('chen', {title: '陳老師作品'})); //center.on('panelactivated',function(){ // alert(center.titleTextEl); //}, this, true); //center.showPanel('center'); /*two ways to activate the tabs.and tabs= many CPs 如果在BasicDialog中,只需要dialog本身就可以獲取getTabs,因為Dialog本身就是 唯一的一個Region; 但在LayoutDialog中,Region是多個的,所有要指明哪個一個Region才行 */ // stoe a refeence to the tabs 獲取TABS集合 var tabs = layout.getRegion('center').getTabs();//逐一加入事件 tabs.getTab('center').on('activate', function(){this.show_thumb('student')}, this, true); tabs.getTab('luo').on('activate', function(){this.show_thumb('luo')}, this, true); tabs.getTab('chen').on('activate',function(){this.show_thumb('chen')}, this, true); //center.showPanel('chen'); //用Region激活也可以 /*Tips:不能立即激活事件,會點延時,經(jīng)過多行代碼的延時便ok !用addbufferlistener理論上也可以*/ layout.getRegion('center').getTabs().activate('center');
3.View的使用方式
//XML:index方式訪問字段;JSON:直接使用字段名 var tpl = new YAHOO.ext.Template( '<div class="thumb">'+ '<div><img onclick=popupDialog("userfiles/image/'+who+'/{0}",{2},{3}) '+ ' src=userfiles/image/lite_'+who+'/{0}></div>' + '<div>文件大小: {1}</div>'+ '</div>' ); tpl.compile(); //“編譯DOM”加速 var schema = { tagName: 'row',//Item項 id: 'id',//ID如不需要時,設(shè)置空白字符串,不能取消! fields: ['filename','filesize','width','height']//讀取的字段 }; var dm = new YAHOO.ext.grid.XMLDataModel(schema); var mainView = new YAHOO.ext.View('pic_'+who, tpl, dm, { singleSelect: true,//If JSON,還需指定一個config:jsonRoot emptyText : '<div style="padding:10px;">沒有匹配的內(nèi)容!</div>' }); dm.on('load',function(){}, this, true); mainView.on('click', function(vw, index, node, e){ //alert('Node "' + node[] + '" at index: ' + index + ' was clicked.') },this, true); mainView.prepareData = function(data){ // prepare,用于自定義格式 //如JSON方式直接屬性名訪問,e.g data.sizeString = formatSize(data.size); data[1] = formatSize(data[1]); return data; }; //用DataModel加載文件,如果是JSONView,這個服務(wù)由JSONView本身(UpdateManager)提供 dm.load('xml.asp?who='+who);
4.JSONView的使用方式
var dh = YAHOO.ext.DomHelper; dh.append(document.body, {tag: 'div', id: 'editUserDialog-user'}); //XML:index方式訪問字段;JSON:直接使用字段名 var tpl = new YAHOO.ext.Template('
' + '
' + '
' + '
'); tpl.compile(); var mainView = new YAHOO.ext.JsonView('pic', tpl, { singleSelect: true, jsonRoot: 'user', emptyText : '
' }); mainView.load("test.asp", "id=2"); //JSONView特有的異常事件 mainView.on('loadexception', function(){onLoadException()}, this, true); var onLoadException= function(v,o){ alert('Error'); };
5.獲取XML/JSON的fields值與分頁
這兩個問題放在一起討論的原因是至今我還不能實現(xiàn)。如果按照jack的辦法:
mainView.on('click', function(vw, index, node, e){ alert('Node "' + node.id + '" at index: ' + index + ' was clicked.'); });
可得到index但node.id無法獲取。我只好用較丑陋的方式實現(xiàn):
//在Domhelper中“硬”輸出click事件 var tpl = new YAHOO.ext.Template( '<div class="thumb">'+ '<div><img onclick=popupDialog("userfiles/image/'+who+'/{0}",{2},{3}) '+ ' src=userfiles/image/lite_'+who+'/{0}></div>' + '<div>文件大小: {1}</div>'+ '</div>' );
分頁:
View的分頁視乎應(yīng)該通過DataModel。但我沒成功過。如知道緣由的朋友懇請告之。
http://www.ajaxjs.com/yuicn/article.asp?id=20070239
相關(guān)文章
學(xué)習(xí)YUI.Ext 第四天--對話框Dialog的使用
學(xué)習(xí)YUI.Ext 第四天--對話框Dialog的使用...2007-03-03javascript 放大鏡 v1.0 基于Yui2 實現(xiàn)的放大鏡效果
javascript 放大鏡 v1.0 基于Yui2 實現(xiàn)的放大鏡效果代碼。2010-03-03學(xué)習(xí)YUI.Ext 第七天--關(guān)于View&JSONView
學(xué)習(xí)YUI.Ext 第七天--關(guān)于View&JSONView...2007-03-03Ext第一周 史上最強學(xué)習(xí)筆記---GridPanel(基礎(chǔ)篇)
我不想教各位新手什么高級技術(shù),因為我也在研究,只是想教大家一個思考的方向,能夠具有舉一反三的能力,能夠真正學(xué)會Ext和開始深入了解。2008-12-12ext form 表單提交數(shù)據(jù)的方法小結(jié)
Ext 表單提交數(shù)據(jù)的三種方法小結(jié),方便利用ext提交數(shù)據(jù)的朋友2008-08-08