使用 Dojo 的 Ajax 应用开发进阶教程,第 7 部分: Dojo 核心库深入介绍
2010-09-26 00:00:00 来源:WEB开发网限于篇幅,本文并不会详细介绍 dojo.data的全部 API 的细节,而是讨论一些需要注意的地方与最佳实践。在 dojo.data.api.Read接口中的 fetch()方法是异步执行的,需要传入回调方法。即便数据仓库中的条目都是可以从本地获取的,也是需要使用回调方法。从 API 的角度来说这是必须的,不过可能会造成一些代码编写时候的麻烦。通过与 dojo.Deferred配合起来使用,可以简化代码的编写。
当 dojo.data数据仓库作为用户界面组件后台的数据来源时,dojo.data.api.Notification API 非常有用。它可以用来实现典型的观察者设计模式。当数据仓库中的数据发生改变时,用户界面组件也需要相应的更新。使用 dojo.connect()连接到数据仓库的 onNew()、onDelete()和 onSet()方法上,就可以在创建条目、删除条目和更新条目属性的时候得到通知。这里需要注意的是当一个条目被删除的时候,在 onDelete()方法中可以得到该条目的对象,但是该条目已经不属于原来的数据仓库了,不能再通过 getValue()等方法来获取条目中的属性。onSet()在每个属性更新的时候都会被调用。如果同时更新了条目的多个属性,需要注意 onSet()方法的重复调用。
Dojo 核心库提供了两个基于 JavaScript 对象的数据仓库的实现 dojo.data.ItemFileReadStore和 dojo.data.ItemFileWriteStore。这两个仓库可以作为服务器端返回的数据与 Dojo 用户界面组件之间的桥梁。很多 Dojo 用户界面组件,如表格、树和下拉列表等,都使用 Dojo 数据仓库作为其后台数据模型。一般的做法是从服务器端数据中创建出一个 dojo.data.ItemFileReadStore,提供给这些用户界面组件使用。dojo.data.ItemFileWriteStore还可以作为 JavaScript 数组的良好替代。Ajax 应用中通常会使用数组来维护内部的领域对象。使用数组在查找、更新和删除对象时不太方便,一般需要添加额外的代码。使用 dojo.data.ItemFileWriteStore可以很好解决这个问题。它提供的通知 API 的支持,也能帮助编写更加简洁的代码来处理对象的变化。在使用这两个数据仓库的时候,需要注意 JavaScript 对象中的数组类型的属性的存取方式。对于数组里面包含的多个元素,需要通过 getValues()方法才能读取出来。如果使用 getValue()方法的话,只能读取到数组的第一个元素。如果希望能够统一成使用 getValue()方法,则在该数组存放到数据仓库之前,需要把它转换成只有一个元素的新数组。代码清单 1 中给出了在数据仓库中的条目和 JavaScript 对象之间相互转换的示例。
更多精彩
赞助商链接