zoukankan      html  css  js  c++  java
  • sencha touch list tpl 监听组件插件(2013-9-15)

    插件代码

     1 /*
     2 *list tpl模版加入按钮监控
     3 *<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-stretched btn"><span class="x-button-icon x-shown lower" fire="showWeibo"></span></div>
     4 *fire="showWeibo" 作用是激活指定事件
     5 *有两个参数cmp:视图本身以及doit
     6 *只要是以上格式的模板都可以被监控到
     7 *其中btn、lower为自定义样式,其他都是st自带样式
     8 */
     9 Ext.define('ux.ListTpl', {
    10     alias: 'plugin.ListTpl',
    11     xtype: 'listTpl',
    12     config: {
    13         list: null,
    14         //按下时添加css
    15         pressedCls: 'pressing',
    16         //监控对象选择器
    17         delegate: 'div.x-button',
    18         //是否监听input控件
    19         isInput: false
    20     },
    21     constructor: function (config) {
    22         this.initConfig(config);
    23         this.callParent([config]);
    24     },
    25     //初始化
    26     init: function (list) {
    27         this.setList(list);
    28     },
    29     //更新配置
    30     updateList: function (newList, oldList) {
    31         if (newList) {
    32             //为自定义按钮注册点击事件
    33             newList.container.element.on({
    34                 tap: 'onTap',
    35                 touchstart: 'onPress',
    36                 touchend: 'onRelease',
    37                 delegate: this.getDelegate(),
    38                 scope: this
    39             });
    40             if (this.getIsInput()) {
    41                 //为自定义按钮注册点击事件
    42                 newList.container.element.on({
    43                     blur: 'onBlur',
    44                     delegate: 'input[type="text"]',
    45                     scope: this
    46                 });
    47             }
    48 
    49         }
    50     },
    51     //执行动作
    52     onTap: function (e) {
    53         var me = this.getList(),
    54         item = Ext.getCmp(Ext.get(e.getTarget()).up('.x-list-item').id),
    55         index = item.$dataIndex,
    56         record = me.getStore().getAt(index),
    57         el = e.getTarget(this.getDelegate(), null, true),
    58         fire = el.getAttribute('fire'),
    59         action = 'do' + fire;
    60         me.fireAction(fire, [me, record, item, index, el], action);
    61     },
    62     //按钮按下时,添加css
    63     onPress: function (e, node) {
    64         var el = e.getTarget(this.getDelegate(), null, true);
    65         el.addCls(this.getPressedCls());
    66     },
    67     //按钮松开时,移除css
    68     onRelease: function (e, node) {
    69         var el = e.getTarget(this.getDelegate(), null, true);
    70         el.removeCls(this.getPressedCls());
    71     },
    72     //焦点离开时,将值填充到store中
    73     onBlur: function (e) {
    74         var me = this.getList(),
    75         item = Ext.getCmp(Ext.get(e.getTarget()).up('.x-list-item').id),
    76         index = item.$dataIndex,
    77         record = me.getStore().getAt(index),
    78         el = e.getTarget('input', null, true),
    79         value = el.getValue(),
    80         name = el.getAttribute('name');
    81         record.data[name] = value;
    82     }
    83 });

    使用代码:

     1 Ext.define('app.view.eatery.Shop', {
     2     alternateClassName: 'eateryShop',
     3     extend: 'Ext.List',
     4     xtype: 'eateryShop',
     5     requires: ['ux.ListTpl'],
     6     config: {
     7         cls: 'list',
     8         plugins: [{
     9             xtype: 'listTpl',
    10             isInput: true
    11         }],
    12         title: '购物车',
    13         btmBar: 'eateryBar',
    14         isNoHide: true,
    15         scrollToTopOnRefresh: false,
    16         itemTpl: new Ext.XTemplate(
    17         '<div class="bh">',
    18             '<div class="bone">{name}</div>',
    19             '<div class="bh">',
    20                 '<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-stretched btn" style="visibility:{visibility}" fire="onTasteUp" value="-1"><span class="x-button-icon x-shown lower"></span></div>',
    21                 '{taste}',
    22                 '<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-stretched btn"  fire="onTasteUp" value="1"><span class="x-button-icon x-shown add"></span></div>',
    23             '</div>',
    24          '</div>',
    25          '<div>{price}</div>',
    26          '<div>备注:<input type="text" name="description" value="{description}"/></div>'),
    27         store: 'shopList',
    28         selectedCls: '',
    29         pressedCls: ''
    30     }
    31 });

    监听代码:

     1  eateryList: {
     2                 onTasteUp: function (list, index, record, btn) {
     3                     var visibility = 'visible',
     4                     value = +btn.getAttribute("value"),
     5                     taste = record.data.taste + value;
     6                     if (taste == 0) {
     7                         visibility = 'hidden';
     8                     }
     9                     record.set({ taste: taste, visibility: visibility });
    10                 }
    11             }

    效果图:

    2013.9.15

    优化代码,参考list源码书写。为控件添加点击事件和点击方法,不再触发list默认单击事件

    添加了对输入框的支持,可自动将输入框中的值填充到数据源中

  • 相关阅读:
    pip install
    自动更新高清电影文件中文名
    csv、excel导入oracle
    02_Jenkins配置任务
    01_Jenkins windows安装
    run_jmeter.py
    02_禅道的基本使用
    01_禅道搭建手册
    01_charles 下载安装(破解版)
    06_Linux常见的命令
  • 原文地址:https://www.cnblogs.com/mlzs/p/3317570.html
Copyright © 2011-2022 走看看