Ext框架学习(四) XTemplate和cookies

在学习了之前的几个主题后,现在学个更酷的。
在这次,我们将学习Ext中如何使用自定义的模版来展示数据,学会用 Ajax去后台读取并操作返回的数据,学会如何设置和读取 cookies.

首先还是先看一段代码
            var tpl = new Ext.XTemplate(
                    
'<tpl for=".">',
                    
'<div class="thumb-wrap" id="{ItemName}">',
                    
'<div class="thumb"><a href="Purchase/ItemDetail.aspx?ItemID={ItemID}"><img src="{PicturePath}" title="{ItemName}"></a></div>',
                    
'<span class="x-editable">{ItemName}</span>&nbsp;&nbsp;',
                    
'<span class="x-editable">{UnitPrice}.00元</span>&nbsp;&nbsp;',
                    
'<span class="x-editable">{CategoryID}</span>&nbsp;&nbsp;',
                    
'<a itemname="{ItemName}" itemid="{ItemID}" picturepath="{PicturePath}" unitprice="{UnitPrice}" href="Purchase/ShoppingCart.aspx?ItemID={ItemID}" onclick="document.additem(this);" target="_blank">购买<a/>',
                    
'&nbsp;&nbsp;<a href="#">加入收藏夹<a/>''</div>''</tpl>',
                    
'<div class="x-clear"></div>');
这里,我们定义了一个XTemplate,大家可以看到,这是纯html啊,呵呵 这样,我们就可以在这随意的写,想怎么写,就怎么写.只要使用{}就可以读出这个xTemplate所在的dataview的store里的数据域了。爽吧?这里有个小技巧.如果想在onclick等事件里写一些参数传进去,可能需要一些转义字符,如果你懒,也可以象我一样:看到那个<a>了没有,我是这样写的document.additem(this),这样写一个方法,然后在<a>中定义一些你需要的属性, 比如 itemname ={itemname},然后就可以在自定义的方法里引用了。我这里的方法定义如下:
document.additem = function(obj) {
                Common.intoCart(obj.getAttribute(
'itemid'), 1, obj
                        .getAttribute(
'itemname'), obj
                        .getAttribute(
'picturepath'), obj
                        .getAttribute(
'unitprice'))
                
if ((Ext.state.Manager.get("customerid"!= "00000000-0000-0000-0000-000000000000")
                        
&& (Ext.state.Manager.get("customerid"!= undefined)) {
                    
// 已登陆,则要把该用户的购物车存入数据库
                    Ext.Ajax.request({
                        url : 
'../Handler/AddCartItemHandler.ashx?ItemID='
                                
+ getAttribute('itemid'+ '&ShoppingCartID='
                                
+ Ext.state.Manager.get("customerid"),
                        success : function(response) 
{
                          alert(
"添加入购物车成功!")
                        }

                    }
)
                }

            }
;

这里的document是为了避免找不到这个方法,因为之前出现additem未定义这样的错误,到现在也不知道为什么.加了document.的引用就好了。有知道的可要告诉我啊 ~~~~thanks!~ getAttribute(itemname)是<a>的方法, 它可以引用到<a>中自定义的属性,似乎是比较简单的html,我之前却不懂,这很有用噢,呵呵  Common.intoCart是码农同志写的,把一个商品加入购物车了。Ext.state.Manager.get(customerid)是取一个cookie的值,因为这个值是guid的,所以就那么判断了.....
然后通过Ext.Ajax.request传回后台处理,把这个item加入到该用户的购物车里(因为用户已经登陆,所以要存入数据库了).
顺便说一句Ext.state.Manager.set方法有两个参数,一个是cookie名,一个是值,set(name,value)就可以了。

最后,使用panel引用这个xtemplate,代码如下
var item1panel = new Ext.Panel({
                id : 
'images-view',
                frame : 
true,
                autoHeight : 
true,
                collapsible : 
true,
                layout : 
'column',
                title : 
'最新汽车产品',

                items : 
new Ext.DataView({
                    store : store,
                    tpl : tpl,
                    autoHeight : 
true,
                    multiSelect : 
true,
                    overClass : 
'x-view-over',
                    itemSelector : 
'div.thumb-wrap',
                    emptyText : 
'No images to display'
                }
)
            }
);
tpl就是之前定义的那个XTemplate,
store的定义如下:
var store = new Ext.data.Store({
                url : 
'Handler/Handler.ashx',
                reader : 
new Ext.data.JsonReader({
                    id : 
'ItemID',
                    fields : [
{
                        name : 
'ItemID'
                    }
{
                        name : 
'UnitPrice'
                    }
{
                        name : 
'ItemName'
                    }
{
                        name : 
'CategoryID'
                    }
{
                        name : 
'PicturePath'
                    }
]
                }
)
            }
);

简单的例子就完了,现在还有个问题,就是在'<a itemname="{ItemName}" itemid="{ItemID}" picturepath="{PicturePath}" unitprice="{UnitPrice}" href="Purchase/ShoppingCart.aspx?ItemID={ItemID}" onclick="document.additem(this);" target="_blank">购买<a/>'这里,我怎么点也链接不到我想去的那个页面,只能通过右键-->打开来打开页面,太痛苦了。大家知道为什么吗  告诉我,我快哭了。
Tag标签: Ext2.0,ExtJS

posted on 2008-04-09 17:34 GodSpeed 阅读(952) 评论(4)  编辑 收藏 网摘

评论

#1楼  2008-04-10 09:58 guest [未注册用户]

很明显,<a>标签里面放了一个onclick事件,单击的时候相应了这个事件你的href指向的链接就不会发起,所以打不开,也许可以设置另外一个<a id='xx' href='你要去的连接地址'/> 在当前的onclick事件上document.additem(this);document.getElementById('xx').click();   回复  引用    

#2楼 [楼主] 2008-04-11 10:24 GodSpeed      

Thank u .
在之前我想到了一个办法,就是在onclick事件中写了一个location.href=***,这样也可以跳转了。呵呵   回复  引用  查看    

#3楼  2008-07-25 20:46 weidamao [未注册用户]

为什么只使用<A>标签的href功能不能打开一个新页面呀.是在模版中不能被正常解析吗?   回复  引用    

#4楼  2008-10-23 14:22 QFSoft      

请教一下..
我如果想把tpl里面字符型的字段..截取里面的一部分要如何实现..

就比如我那个网址 如果长度大于10的话 后面的用“...”省略后替换掉   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:


相关搜索:
Ext2.0 ExtJS

相关链接:
 
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

统计

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我参与的团队

我的标签

随笔档案(43)

最新评论

阅读排行榜

评论排行榜