技术开发 频道

jQuery Mobile框架开发实战及效果展示

  对Local Storage的操作

  我们将使用HTML5新的特性localStorage API去保存记事内容。简单来说,HTML5的这一新特性localStorage是基于键值对操作的,其类型都为字符串。为了能将NoteModel类实例序列化,需要一个序列化机制将记事本数组转变为字符串,以方便保存在local storage中。同样,也要需要反序列化的机制将已序列化的记事重新转变为NoteModel实例,这是需要在用到NoteModel类时要用到。

  为了方便操作,我们使用一个localStorage API的抽象层去实现,幸好有jStorage这个插件可以帮我们实现这个序列化和反序列化的操作。jStorage插件的地址如下可以下载:

  http://www.jstorage.info/

  jStorage插件允许我们去缓存数字、字符串和对象,在下载解包jStorage后,将相关的文件复制到如下图所示的目录中去,

对Local Storage的操作

  同时,在dataContext模块中,我们将创建一个方法,从localStorage中获得保存过的记事对象,如下代码:

   function loadNotesFromLocalStorage() {
    var storedNotes
= $.jStorage.get(notesListStorageKey);
    
if (storedNotes !== null) {
        notesList
= storedNotes;
    }
}

  同时我们也定义了notesListStorageKey这个变量,如下:

  var notesList = [];

  var notesListStorageKey = "Notes.NotesList";

  其中的loadNotesFromLocalStorage()方法,通过使用了jStorage插件从本地存储中获得了已缓存的记事列表,而插件本身完成了从字符转变为数组实例的工作,并且赋值给数组变量notesList。

  当应用运行的时候,要把已经缓存的记事内容呈现给呈现给用户,这就要求应用在运行时必须调用loadNotesFromLocalStorage()这个方法。为了在一开始调用这些相关的方法,我们再编写一个init()助手方法,首先同样是在AppSpec.js中进行驱动测试的代码编写:

it("Has init function", function () {
    expect(Notes.dataContext.init).toBeDefined();
});

  接下来在DataContext.js中,添加如下代码:

function init() {
    loadNotesFromLocalStorage();
}
..
// Other functions…
return {
    init: init,
    createBlankNote: createBlankNote,
    getNotesList: getNotesList
};

  运行上面的测试,可以看到如下图能通过所有的测试:

对Local Storage的操作

2
相关文章