博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

        记得上大学的时候,看过一篇关于编成学习与素养的文章。 作者认为,对编程的学习重在方法与思想的培养,并举出自己的例子进行了说明。他说,他为了完成一个程序,只要思想与方法明确了,用什么语言都可以,可以用c语言,也可以用vb去实现,如果对这个语言不熟悉,可以立即查阅资料,等完成这个程序后,也许他就会立即忘记为了实现该程序而学到的特定语言的知识,但这段程序却被正确地实现了。 现如今,思来想去,我觉得这篇文章对我大有裨益,由于对思想投入了很多的关注与锻炼,我根本就不会害怕系统与业务逻辑的复杂,只要业务逻辑明确了,系统就可以实现。但另一方面,由于对思想的关注更多,却相对地忽略了对具体知识的掌握,这使得我在开发的过程当中需要经常地去查阅文档,浪费了不少的时间。 是时候改变了,就从今天开始吧。

        以下是今天查阅到的关于Ext的一些函数与应用:
        1、对store的过滤,存在两种方式:
                a) 用自定义函数过滤。filterBy(Function fn, [Object object]),Ext将每一条store中的记录作为参数对fn函数进行调用,如果fn返回该对象,则过滤得结果就会包括该记录。fn有两个参数,第一个是Record类型,第二个是记录的id。
                b) 用字段值进行过滤。filter(string field,string/RegExp,bool anyMatch)。第二个参数如果是字符串,如果anyMatch为false,则匹配field字段里以第二个参数开始的记录,如果anyMatch,则匹配field字段里包含第二个参数的记录。也可以使用正则表达式进行匹配。

                如果是多次过滤,反复应用过滤,应考虑在每次过滤前,调用store的clearFilter(bool suppress)移出过滤条件,恢复第一次过滤之前的状态。suppress为true,不通知相关的listener。
                如果是ComboBox里的store进行过滤,一般放在expand事件里,但clearFilter应放在focus事件里,这样才能保证在记录被过滤完后,仍然可以完整的记录作为过滤的输入。同时还应该在store的load事件里加入过滤的处理,因为第一次触发expand事件时,store里没有数据,必须从服务器加载的时候,因此过滤不起作用,而等到数据被完全加载后,显示出的数据就是未经过滤的数据,因此应在load时间里进行过滤,以应对初次使用引发的加载导致的过滤不起作用的问题。

        2、对grid里选择记录的获取
                可通过grid.getSelectionModel().getSelections()获取Record数组,也可通过grid.getSelectionModel.getSelected()获取Record。

        3、删除store中的数据
                可通过store.remove(Record)删除一条记录,也可通过store.removeAll()删除所有数据。

        4、each的使用
                Ext.each(Array/NodeList/Mixed Array,function fun,Object scope),该函数的第一个参数是循环调用基于的循环类变量,第二个参数是循环过程中要执行的函数,其参数为有三,分别是Object item,Number index,array allItems。函数可通过返回false的方式停止循环调用,类似于break。
                store.each(function fun),该函数循环调用基于的循环类变量是store,fun参数是Record。函数可通过返回false的方式停止循环调用,类似于break。

        5、向store中添加一行记录
                首先通过Ext.data.Create()创建一个记录的构造器,然后通过new 构造器({field1:'value1',field2:'value2'})的方式创建一条记录,最后通过store.add(Array records)函数将记录添加进store中。