技术开发 频道

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

  创建空白的笔记

  接下来,我们开始创建一个空白笔记的界面。界面的设计草图如下所示:

创建空白的笔记

  我们可以通过BDD测试描述这个行为,在测试用例中,添加如下代码:

it("Returns a blank note", function () {
    var blankNote
= Notes.dataContext.createBlankNote();
    expect(blankNote.title.length
=== 0).toBeTruthy();
    expect(blankNote.narrative.length
=== 0).toBeTruthy();
});

  如果我们现在运行这个测试,测试结果肯定不能通过,因为没有将createBlankNote方法添加到DataContext的测试模块中,修改后的代码如下:

Notes.dataContext = (function () {
    var notesList
= [];
    
function createBlankNote() {
        var dateCreated
= new Date();
        var id
= new String(dateCreated.getTime()) + new String(getRandomInt(0, 100));
        var noteModel
= new Notes.NoteModel({
            id: id,
            dateCreated: dateCreated,
            title:
"",
            narrative:
""
        });
        return noteModel;
    }
    
function getNotesList() {
        return notesList;
    }
    return {
        createBlankNote: createBlankNote,
        getNotesList: getNotesList
    };
})();

  在上面的代码中,会发现其中调用了getRandomInt这个助手类方法,它的作用是在创建新的记事时生成其id编号,由于我们还没编写getRandomint这个方法,所以运行测试时,可以看到是如下的出错界面:

创建空白的笔记

  接下来我们编写getRandomint的代码,如下:

function getRandomInt(min, max) {
    return Math.floor(Math.random()
* (max - min + 1)) + min;
}

  再次运行测试后,依然发现有错误,这次的错误是说我们还没定义NoteModel类的实例,接下来我们在应用目录中创建NoteModel.js文件,代码如下:

  Notes.NoteModel = function (id, dateCreated, title, narrative) {
    this.id
= id;
    this.dateCreated
= dateCreated;
    this.title
= title;
    this.narrative
= narrative;
}

  所有的跟记事相关的操作都必须使用到这个类的实例,包括将记事缓存在移动设备中(用到的是将该类的实例的一个序列化)。

  我们同样要在specrunner.html中,加上对NoteModel.js的引用,如下:

<!-- App --><script type="text/javascript" src="app/DataContext.js"></script>
<script type="text/javascript" src="app/NoteModel.js"></script>

  再次运行测试,可以看到这次测试结果运行正确了,如下图:

创建空白的笔记

2
相关文章