sencha touch 学习笔记- 基本组件1-list和panel(2013网页装在兜里)

简介: 记得学习ASP.NET时.NET里面有一大堆组件,从头学到尾,学的吐血,最后发现,有用的组建只有一个repeater和objectdatasourse,sencha touch 和ASP.NET有很多相似的东西,例如统一框架、面向对象、组件化、事件模型等等,所以学习sencha touch时先从最常...

记得学习ASP.NET时.NET里面有一大堆组件,从头学到尾,学的吐血,最后发现,有用的组建只有一个repeater和objectdatasourse,sencha touch 和ASP.NET有很多相似的东西,例如统一框架、面向对象、组件化、事件模型等等,所以学习sencha touch时先从最常用最基本的组建list和panel入手,顺便了解他的mvc等东西

image image

 

 

以读取博客园rss为例来了解list和panel相关的组建

首先用cmd创建项目,不会创建项目的点 这里

C:\Documents and Settings\Administrator>e:

E:\>cd "E:\extjs\st"

E:\extjs\st>sencha generate app GS1 ../GS1

创建好项目后开始修改里面住视图的代码

image

生成的视图继承了

 extend: 'Ext.tab.Panel',

把他修改为我们的panel  panel 的相关api文档:http://docs.sencha.com/touch/2.2.0/#!/api/Ext.Panel

改为

extend: 'Ext.Panel',

然后吧config 里面的属性全部清空,只保留items属性,内容为空

   config: {
  
        items: [
          
                ]
    }

 

items属性是什么意思,开始我也不知道,知道后来看api发现了 http://docs.sencha.com/touch/2.2.0/#!/api/Ext.Panel-cfg-items

大概意思是用来放子组件的地方例如我们要添加的list组件就可以硬编码到items里面

list组件的 xtype 为:list

 config: {

        items: [
            {
                id:'feedlist',
                xtype:'list',
                itemTpl:'html模板'
            }

                ]
    }

list组件和asp.net里面的repeater组件一样,都是用来展示集合类数据的,对与每一个实体展示为html时,用js模板去展示,这个属性就是itemTpl,

sencha touch js模板很强大 api http://docs.sencha.com/touch/2.2.0/#!/api/Ext.XTemplate

 

在 ASP.NET 里面repeater用objectdatasourse作为数据源,

在sencha touch  里面 list 可以用store 作为自己的数据源,什么是store api:http://docs.sencha.com/touch/2.2.0/#!/api/Ext.data.Store

因为sencha touch 支持mvc,根据我的理解,一个model的集合就是store model api http://docs.sencha.com/touch/2.2.0/#!/api/Ext.data.Model

我们要读取博客园的rss,博客园的rss是xml的在phonegap里面只能跨域读取json的数据,所以得用谷歌的rssapi

https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=15&q=http://feed.cnblogs.com/blog/sitehome/rss

首先我们根据 rss创建一个model

Ext.define('GS2.model.feedlist', {
    extend: 'Ext.data.Model',//创建model要继承Ext.data.Model
    //store:'GS2.view.feedlist',//关联呆会我们要创建的store
    config: {
        fields: [//定义的模型包含哪些字段
            { name: 'id', type: 'int' },
            { name: 'title', type: 'string' },
            { name: 'summary', type: 'string' },
            { name: 'published', type: 'string' },
            { name: 'author', type: 'string' },
            { name: 'link', type: 'string' },
            { name: 'blogapp', type: 'string' },
            { name: 'diggs', type: 'string' },
            { name: 'views', type: 'string' },
            { name: 'comments', type: 'string' }

        ]

    }
});

 

在模型里面支持这几种数据类型

image

然后在创建一个store作为刚才创建model的集合

 
Ext.define('GS2.store.feedlist', {
    extend: 'Ext.data.Store',
 
    config: {
        model: 'GS2.model.feedlist',//关联的model
        storeId:'mystore',//每一个store都要有一个storeId 方便查找和使用
      //  fields: ['title', 'link', 'author', 'contentSnippet', 'content', {
      //      name: 'leaf',
      //      defaultValue: true
     //   }],
        //有事后服务器端返回的数据结构比较复杂,直接在这里定义一级节点比定义复杂的model方便些
        autoLoad:true,//在实例化的时候是否载入数据,
      //  root: {
      //      leaf: false
      //  },
        proxy:{
            type: "jsonp",
            url : "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=15&q=http://feed.cnblogs.com/blog/picked/rss/",
 
            reader: {
                type: 'json',
                rootProperty: 'responseData.feed.entries'
            }
        }
    }
 
});

定义好store后,就可以在view里面和list关联起来使用,就像asp.net里面repeater绑定一样

在view里面使用store和list关联起来的方法有常见的两种

1 直接创建并使用,例如在initialize 视图初始化里面

 initialize:function(){
        console.log(Ext.getStore('mystore'));
        var list=  {
            xtype:'list',
            //store:Ext.getStore('mystore'),//mystore 是可以的
            store:Ext.create('GS2.store.feedlist'),
            itemTpl:'1<div class="tweet"><span class="posted">{title}</span><h2>{author}</h2></div>',
            id:'blogclasslist',
            flex:1
        };
        this.add(list);
    }

 

2 系统启动时初始化store,用的时候查找药用的store

系统启动时初始化store和model,在app.js 里面

 requires: [
        'Ext.MessageBox',
        'Ext.TitleBar',
        'Ext.dataview.List',
        'Ext.data.proxy.JsonP',
        'GS2.model.feedlist',
        'GS2.store.feedlist'
    ],
 
    models:[
        'GS2.model.feedlist'
    ],
    stores:[
        'GS2.store.feedlist'
    ],
    views: [
        'Main'
    ],

requires 明确要依赖那些类,但是并不是实例化这些

下面的models 会实例化相关的model,stores 会实例化相关的stores,然后在view里面和list关联起来,这里有很隐秘的BUG,被坑了1天

2.1 在config的items里面配置,

  config: {
        layout:'vbox',
        items: [
            {
                docked: 'top',
                xtype: 'titlebar'
            },{
                xtype:'list',
                store:'mystore',//Ext.getStore('mystore') 是不可以的
                //注意这里必须是store的id
                itemTpl:'2<div class="tweet"><span class="posted">{title}</span><h2>{author}</h2></div>',
                id:'2blogclasslist',//组件的id方便上下文查找这个list
                flex:2
 
            }
                ]
    }

2.2 在initialize 里面动态的添加组件,我比较喜欢这种方式

 initialize:function(){
        console.log(Ext.getStore('mystore'));
        var list=  {
            xtype:'list',
            store:Ext.getStore('mystore'),//mystore 是可以的
            //store:Ext.create('GS2.store.feedlist'),
            itemTpl:'1<div class="tweet"><span class="posted">{title}</span><h2>{author}</h2></div>',
            id:'blogclasslist',
            flex:1
        };
        this.add(list);
    }

这样就简单的把list和store绑定了,store里面的数据改变了,和他绑定的list展示的内容也就变了

对与store中的每一个model都是用itemTpl 的模板展示出来 语法很简单 每个字段用{}括起来就好了

复杂的 if for 等 api:http://docs.sencha.com/touch/2.2.0/#!/api/Ext.XTemplate

对与 list 最基本的操作就是点击一个list触发的事件了

list 还有两个非常常用的事件,当然,其他事件也很有用

单击事件 和选择时间

首先是单击事件

        var list=  {
            xtype:'list',
            store:Ext.getStore('mystore'),//mystore 是可以的
            //store:Ext.create('GS2.store.feedlist'),
            itemTpl:'1<div class="tweet"><span class="posted">{title}</span><h2>{author}</h2></div>',
            id:'blogclasslist',
            flex:1,
            listeners:{
                itemtap:function( obj, index, target, record, e, eOpts ){
                    //点击事件
                    // 这几个参数也比较有用
                    //index 当前单击的 序号 可以根据序号在store中查找数据
                    //target 具体单击的是那个元素,有时候需要精确到那个按钮
                    //record 当前单击的包含的数据 就是store中的一个model
                    alert('点击事件');
                }
            }
        };

然后是选择事件

{
                xtype:'list',
                store:'mystore',//Ext.getStore('mystore') 是不可以的
                //注意这里必须是store的id
                itemTpl:'2<div class="tweet"><span class="posted">{title}</span><h2>{author}</h2></div>',
                id:'2blogclasslist',
                flex:2,
                listeners:{
                    select:function( obj,  record, e, eOpts ){
                        //选择事件
                        alert('选择事件');
                    }
                }

            }
test
相关文章
|
9月前
|
JavaScript
Ant designe vue中有关<a-list>组件中 实现分页以及复选框效果
Ant designe vue中有关<a-list>组件中 实现分页以及复选框效果
500 0
|
前端开发 开发者 容器
|
1月前
|
前端开发 JavaScript UED
React 拖拽排序组件 Draggable List
在现代Web应用中,拖拽排序功能显著提升用户体验。使用React结合`react-dnd`库,可以轻松创建高效且易于维护的拖拽排序组件。通过简单的拖拽操作,用户能直观调整列表项顺序,适用于任务管理、看板工具等场景。实现步骤包括项目初始化、安装依赖、创建基础组件、添加拖拽功能及管理状态和事件。常见问题如拖拽效果不流畅、顺序未更新等可通过性能优化、正确处理索引交换等方式解决。移动端支持也需考虑,确保跨平台的良好体验。
121 25
|
6月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
108 4
|
3月前
|
大数据 UED
「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List和Grid组件展示数据列表
List 和 Grid 是鸿蒙开发中的核心组件,用于展示动态数据。List 适合展示垂直或水平排列的数据列表,而 Grid 则适用于展示商品或图片的网格布局。本篇将展示如何封装组件,并通过按钮实现布局切换,提升界面的灵活性和用户体验。
164 9
|
3月前
|
JavaScript 数据管理 虚拟化
ArkTS List组件基础:掌握列表渲染与动态数据管理
在HarmonyOS应用开发中,ArkTS的List组件是构建动态列表视图的核心。本文深入探讨了List组件的基础,包括数据展示、性能优化和用户交互,以及如何在实际开发中应用这些知识,提升开发效率和应用性能。通过定义数据源、渲染列表项和动态数据管理,结合虚拟化列表和条件渲染等技术,帮助开发者构建高效、响应式的用户界面。
294 2
|
5月前
|
数据可视化 前端开发 容器
Twaver-HTML5基础学习(41)列表可视化视图组件(List)
本文介绍了如何在Twaver-HTML5中使用列表可视化视图组件(List),展示了如何创建列表、设置列表属性(如行高、间隔颜色等)、实现数据绑定和排序,以及如何通过React代码示例进行操作。
71 2
Twaver-HTML5基础学习(41)列表可视化视图组件(List)
|
5月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
6月前
|
索引
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
735 3
nvue中list组件下拉刷新后无法上拉加载更多
nvue中list组件下拉刷新后无法上拉加载更多
158 0