当前位置:编程学习 > JAVA >>

sencha touch2 - 给container 添加tap 事件

背景:在ST中有时候我们需要让不同container组成一个模版。然而我们需要点击某个container时候我们就需要触发事件。但是在container里面是没有tap这个事件的。我们需要手工去去添加注册这个事件。并且你可以选择任意的container注册事件。有两种方法可以注册事件

参考国外一个帖子:

How to set element listeners
 

container.js

Ext.define('DingCan.view.component.HomeItem', {
extend : 'Ext.Container',
xtype : 'homeitem',
requires : ['Ext.Label'],


config : {
// 此处的fullscreen要慎用。不然dataview不能显示
// fullscreen : true,

layout : 'hbox',

//方法一:这个地方可以直接给container注册一个事件。确定就是I不便于mvc模式维护
/*listeners : {
tap : {
fn : function() {
console.log('This component was tapped...');
},
element : 'element'
}
},*/
items : [{
itemId : 'image',
xtype : 'image',
mode : 'tag',
src : '',
height: 57,
    width: 57
}, {
style:{'padding-left': '10px'},

//在initiate函数中会通过这个id来查找到
itemId:'homelistitem',
xtype : 'container',
layout : 'vbox',
items : [{
itemId : 'name',
searchstr : '',
html : ''
}, {
itemId : 'listdes',
html : ''
}]
}]
},


initialize : function() {
this.callParent(arguments);

//方法二:我们通过找到你需要注册的container的itemId属性找到。然后给他手工注册一个tap事件。这种方法有助于用MVC模式编程
//给container加一个tap事件
var me = this;

//找到自己的container
var someItem = this.down('#homelistitem'); 

//添加tap事件
someItem.element.on({
scope : me,

//注意这个地方tap事件
tap : function(e, t) {

//里面的函数tapItem函数可以自定义。也就是你才controller里面需要重写的一个函数
someItem.fireEvent('tapItem', me, e, t)
}
})
},


beforeInitialize : function() {
this.imageEl = this.down('#image');
this.nameEl = this.down('#name');
this.listdesEl = this.down('#listdes')
},


setImage : function(image) {
this.imageEl.setSrc(image)
},


setName : function(name) {
this.nameEl.setHtml(name)
},

setSearchstr : function(searchstr){
this.nameEl.searchstr = searchstr
},


setListdes : function(listdes) {
this.listdesEl.setHtml(listdes)
}
})

contoller 的调用

Ext.define('DingCan.controller.SelectStuff', {
extend : 'Ext.app.Controller',


config : {
refs : {
homeList : 'container[itemId="homelistitem"]'
},


control : {
homeList : {

//重写tapitem这个函数
tapItem:'tapHomeList'
},

}


},

//点击container时候会执行此函数
tapHomeList:function(me,e,t){
console.log('tapped me');
},

})

补充:web前端 , JavaScript ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,