在上一个视频里我们定义了一个固定形式的路由,就是 notes ... 很多时候,我们需要在路由的地址里面加上参数 ... 比如,想让用户访问单个笔记内容的时候,你可能需要使用一个 notes 斜线 加上笔记 id 的形式的地址来访问某个笔记的内容 ... 在这种形式的地址里面,笔记的 id 就应该是这个路由里面要用到的参数 ...
Backbone 的路由里面,定义一个普通的参数可以使用冒号加参数名字的形式 (:param)... 它可以表示在地址里面,斜线之间的一部分 ...
另外,也可以使用 splat 形式的参数,这可以表示多个部分的地址 ... 下面,我们还是通过几个演示来理解一下地址中的参数。
在这个路由器的 routes 属性里面,用一个逗号分隔一下 .. 另起一行,再去定义一个路由 ... 这个地址的形式可以是 notes 斜线 ... 加上一个冒号 id ...
处理它的函数是 show ...
'notes/:id' : 'show'
在这个路由里面,冒号 id 就是一个参数 ... 在处理它的 show 这个函数里面,可以接受这个 id 作为它的一个参数 ... 这样在函数里面,可以利用这个参数 ... 比如根据笔记的 id 号,从数据库里查询出这条笔记的具体的内容。
在下面,我们再去定义这个 show 函数 .. . 然后把路由里面的 id 参数,作为这个函数的一个参数传递进来 ... .. 为了测试,我们还是先在控制台上输出一行文字 .. console.log ... 笔记 .. 加上 id 号 ...
show: function(id) {
console.log('笔记:' + id);
}
另起一行,下面,我们可以再根据这个 id 号,从集合里找到这个模型,然后用模型的视图渲染一下,再显示到页面上。
得到这个模型,可以使用集合的 get 方法 ... 把 id 号交给这个方法 ...
var note = noteCollection.get(id);
然后再根据这个模型去创建一个视图 ...
var noteView = new NoteView({model: note});
最后再把渲染之后的视图内容显示到页面上。
jQuery('#note_list').html(noteView.render().el)
保存 ... 再去预览一下 ...
输入地址 ... #notes 斜线 ... 再加上笔记的 id 号 ,1,... 在控制台上会显示 笔记 1 ... 同时在页面上,也会显示出这条笔记的内容。
再换一下这个地址上的笔记的 id 号 .. 2 ... 在页面上会显示 id 号是 2 的这条笔记的内容。
处理这个地址的函数会接收到 notes 后面的这个 id 号 ...
再试一下其它的 ... 在 id 号后面再加上一个斜线 .. #notes/3/
这回没有在控制台上显示对应的内容 ... 因为在这个地址的最后,加上了一个斜线 .... Backbone 会区分出来 ... 带斜线和不带斜线的地址会认为是两种形式的地址 ...
在这个最后的斜线后面,再加上一小段东西 ... #notes/3/bookmark
同样,也是不会显示对应的内容 ... 因为这也属于另一种形式的地址 ... 在定义路由的时候,可以加上这小段内容 ... 也就是这个斜线 bookmark ...