2019独角兽企业重金招聘Python工程师标准>>>

本文是“ 使用phoneGap和Sencha Touch 2开发Android应用程序”系列教程的第4章, 在这一章,我们会完成以下任务

  • 在笔记编辑视图中添加删除功能。
  • 在笔记编辑视图中,实现点击“返回”按钮回到笔记列表视图的功能。
  • 编辑笔记列表视图,使之按照笔记创建日期分组显示:

从Sencha Touch 数据存储中删除记录

在笔记编辑视图中,当用户点击删除按钮时,删除操作就启动了:

为了实现删除操作,我们需要给NoteEditor视图类添加一个处理点击删除事件的方法(NoteEditor视图类定义为NoteEditor.js ):

var deleteButton = {xtype: "button",iconCls: "trash",iconMask: true,handler: this.onDeleteButtonTap,scope: this
};

就像给保存按钮添加事件处理方法一样,我们使用handler和scope两个配置参数,用来映射处理按钮点击事件的方法,同样这个方法的作用域仅限于本视图类。

和之前一样,我们需要在NoteEditor视图类中添加一个 onDeleteButtonTap() 方法来向控制器传播事件。

onDeleteButtonTap: function () {console.log("deleteNoteCommand");this.fireEvent("deleteNoteCommand", this);
}

和之前处理新增动作类似,我们需要在控制器的control中定义用于捕捉来自于noteEditor视图中的deleteNoteCommand事件:

control: {notesListContainer: {// The commands fired by the notes list container.newNoteCommand: "onNewNoteCommand",editNoteCommand: "onEditNoteCommand"},noteEditor: {// The commands fired by the note editor.saveNoteCommand: "onSaveNoteCommand",deleteNoteCommand: "onDeleteNoteCommand"}
}

现在我们可以在onDeleteNoteCommand() 方法中实现删除笔记的逻辑:

    onDeleteNoteCommand: function(){// console.log("onDeleteNoteCommand");var noteEditor = this.getNoteEditor();// 当前编辑视图的引用var currentNote = noteEditor.getRecord();// 当前将被删除的笔记var notesStore = Ext.getStore("Notes");  // 本地数据库notesStore.remove(currentNote);   // 从库中移除当前笔记notesStore.sync();//返回列表视图this.activateNotesList();}

首先,在这里我们得到了当前所处于的编辑视图、将被删除的笔记以及本地的笔记库。请牢记,因为我们在refs配置参数中设置了noteEditor,所以可以使用框架为我们生成的getNoteEditor() 方法来获取当前编辑视图的引用。

refs: {// We're going to lookup our views by xtype.notesListContainer: "noteslistcontainer",noteEditor: "noteeditor"
}

接着将当前笔记从笔记数据存储中删除并提交到本地数据库:

notesStore.remove(currentNote);
notesStore.sync();

最后,从当前视图返回列表视图

this.activateNotesList();

连接上设备或者启动模拟器,看看删除功能是否能够正常生效。

返回主页面

为了让笔记编辑视图的返回按钮,能够使应用程序返回主视图(列表视图),而不保存编辑视图的改变,我们需要在Note Editor视图中给返回按钮添加单击事件的处理方法:

var backButton = {xtype: "button",ui: "back",text: "Home",handler: this.onBackButtonTap,scope: this
};

定义onBackButtonTap()方法来传播事件:

onBackButtonTap: function () {console.log("backToHomeCommand");this.fireEvent("backToHomeCommand", this);
}

在控制器中,添加对应backToHomeCommand事件的处理方法onBackToHomeCommand() :

control: {notesListContainer: {// The commands fired by the notes list container.newNoteCommand: "onNewNoteCommand",editNoteCommand: "onEditNoteCommand"},noteEditor: {// The commands fired by the note editor.saveNoteCommand: "onSaveNoteCommand",deleteNoteCommand: "onDeleteNoteCommand",backToHomeCommand: "onBackToHomeCommand"}
}

在控制器中编写onBackToHomeCommand()方法:

onBackToHomeCommand: function () {console.log("onBackToHomeCommand");
this.activateNotesList();
}

在这个方法中,不需要任何逻辑处理,直接调用activateNotesList()方法返回主视图即可,接下来可以启动模拟器,看看实际的运行效果。

对Sencha Touch列表设置分组

现在我们来补充一个非常有用的功能:对保存的所有笔记按照创建日期进行分组显示。列表分组在Sencha Touch中非常容易实现。首先我们需要在Notes Store中定义一个grouper配置参数:

Ext.define("NotesApp.store.Notes",{extend:"Ext.data.Store",requires:"Ext.data.proxy.LocalStorage",config:{model:"NotesApp.model.Note",proxy : {type : "localstorage",id : "notes-app-store"},sorters:[{property:'dateCreated',direction:'DESC'}],grouper:{sortProperty:"dateCreated", // 按照创建日期进行分组direction : "DESC",  // 日期倒序分组groupFn :function(record){if(record && record.data.dateCreated){return record.data.dateCreated.toDateString();}else{return '';}}}}
});

在Sencha Touch的文档中没有对grouper进行很详细的解释,不过从上面的代码来看,grouper配置项并不是很难理解。groupFn方法负责生成分组的标签,在我们这个例子中,标签就是笔记创建的日期:

sortProperty指定了按照哪个属性对分组进行排序,如果没有定义这个配置项,将按照groupFn 方法的返回值进行排序,direction则指定了分组是按升序还是降序排列。

最后,我们需要在NoteList视图中添加与分组相关的配置参数:

Ext.define("NotesApp.view.NotesList",{extend:"Ext.dataview.List",alias:"widget.noteslist",config:{loadText:"正在加载笔记....",emptyText:'<div class="notes-list-empty-text">没有找到相关笔记。</div>',onItemDisclosure:true,grouped:true,itemTpl:'<div class="list-item-title">{title}</div><div class="list-item-narrative">{narrative}</div>'}
});

我们只需要设置grouped为true,列表就会自动按照Store中的分组定义进行分组,通过grouper配置项,我们就能非常方便的对列表进行分组显示。

现在我们来看一下分组之后的应用程序运行情况,启动模拟器,就能看到所有的笔记按照日期分组显示了:

总结

到目前为止,我们已经完成了新建、编辑和删除笔记的功能,而且实现了返回主列表视图的按钮功能。

我们对Notes List 进行了重构,使得所有笔记能够根据保存日期进行分组显示,分组列表显示使用户能够更方便的查看笔记。

在下一章中,我们将不再使用initialize方法来定义Notes List列表视图和Notes Editor编辑视图,而是采用配置参数的方式来定义。

未完待续!

下载

源代码已发布到迅雷快传:http://kuai.xunlei.com/d/KSTEBUJWKTMR

原文出自:  http://miamicoder.com/2012/how-to-create-a-sencha-touch-2-app-part-4/

本教程快速链接

  • 使用phoneGap和Sencha Touch 2开发Android应用程序(一)
  • 使用phoneGap和Sencha Touch 2开发Android应用程(二)
  • 使用phoneGap和Sencha Touch 2开发Android应用程序(三)
  • 使用phoneGap和Sencha Touch 2开发Android应用程序(四)
  • 使用phoneGap和Sencha Touch 2开发Android应用程序(五)

转载于:https://my.oschina.net/u/873661/blog/94369

使用phoneGap和Sencha Touch 2开发Android应用程序(四)相关推荐

  1. PhoneGap与Jquery Mobile结合开发android应用配置

    由于工作需要,用到phonegap与jquery moblie搭配,开发android应用程序. 这些技术自己之前也都没接触过,可以说是压根没听说过,真是感慨,在开发领域,技术日新月异,知识真是永远学 ...

  2. 使用jQuery Mobile和Phone Gap开发Android应用程序

    使用jQuery Mobile和Phone Gap开发Android应用程序 1. 软件准备  要进行android app的开发,当然需要准备Java, eclipse和安装Android SDK, ...

  3. 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结

    用Eclipse 开发Android小程序遇到些小问题,在一边学习的过程中,将遇到的问题就记录一下,方面挺杂的,有关于程序出错的,关于linux应用的,有eclipse设置等- 1.ERROR: Ap ...

  4. PHP开发Android应用程序

    最全的PHP开发Android应用程序http://www.iamlintao.com/?p=744 Android,看过这篇文章后,收益颇多,但安装过程中的细节有很多出入.接下来一一列举出来! 首先 ...

  5. 实用 通用Adb无线调试开发Android应用程序

    实用 通用Adb无线调试开发Android应用程序 无线调试开启方法 一.adb必备条件 二.连接无线调试即可 第一.先进行设备配对(切记两台设备需要在同一个WIFI下) 第二.进行连接 在真机上调试 ...

  6. 拼图android程序,可视化开发Android应用程序:拼图开发模式App Inventor

    可视化开发Android应用程序:拼图开发模式App Inventor 作 者:王向辉 等编著 出版时间:2013 内容简介 <可视化开发Android应用程序:拼图开发模式App Invent ...

  7. 在eclipse上开发Android应用程序

    Android中文文档:开发和调试(eclipse) 2009-12-18 22:13 在用eclipse IDE开发android应用程序之前,你首先要创建一个Android工程,并且建立一个启动配 ...

  8. 开发Android应用程序

    利用其他IDEs和工具开发Android应用程序 通常我们使用安装有ADT插件的eclipse Eclipse with the ADT plugin.来开发Android程序,这个插件将编辑,bui ...

  9. Android连载之:第二章第三节:利用其他的开发环境和工具开发Android应用程序

    2.3 利用其他的开发环境和工具开发Android应用程序 推荐使用带有Android插件的Eclipse来开发Android应用程序,ADT插件提供了编辑.编译.调试功能并集成进了IDE中.然而,S ...

最新文章

  1. 源代码从 300 行到 172,000 行,它用了 23 年
  2. SQL Server 2005 查询处理器未能为执行并行查询启动必要的线程资源。
  3. Redis M/S + Keepalived 主从备份高可用
  4. C语言素数分解prime factoriziation算法(附完整源码)
  5. 交流电机数字控制系统_敲黑板!新型变频调速控制系统对交流电动机设计的特殊要求...
  6. 数据结构课程设计---------用栈来实现表达式求值
  7. 从源代码解读spring之DataSource实现和FactoryBean模式(JndiObjectFactoryBean)
  8. 全面支持开源,微软加速 Visual Studio 和 Azure DevOps 云升级
  9. Taro+react开发(31)微信小程序都是要通过编译的
  10. 链路层基本问题 : 封装成帧、差错检测、流量控制
  11. JS 函数中的call,apply
  12. android 相机应用程序,2020年最佳Android相机的应用程序
  13. 复现扫描全能王的增强锐化
  14. ora-00119和ora-00132解决方案
  15. go mysql recover_Go基础系列:defer、panic和recover
  16. python数据包pandas_python | 数据分析(二)- Pandas数据包
  17. Unity3D插件 Puppet3D的使用
  18. Linux 校准时间命令及其方法
  19. python re库 正则表达式
  20. SQL复杂查询 高速数目和城市数目

热门文章

  1. 微软TechEd 2006亲历(一):交流的价值
  2. 年薪30W前端程序员,需要吃透的前端书籍推荐
  3. “中国工程设计大师”俞加康:为地铁耕耘“时不我待,只争朝夕”
  4. 国外游戏开发商吐槽:开发VR游戏付账单的钱都赚不到
  5. Ant构建与部署Java项目---入门
  6. 官方数据:程序员年纪越大越出色、越稀有
  7. VISTA三步共享文件夹
  8. 蓝桥杯 ADV-14 算法提高 卡勒沃夫之弱水路三千(提高型)
  9. 蓝桥杯 BASIC-11 基础练习 十六进制转十进制
  10. 【数据结构】堆的建立(边输入数据边建立)(给定数字顺序插入)