我试图将我的头围绕在backbone.js上,但由于缺乏(IMO)良好的例子,我发现它很难.
首先,获取对象链接的最佳方法是什么.
如果我想获得Album我能做的模型的编辑网址album.url() + '/edit',这真的是最好的方法吗?
此外,我正在尝试使我的应用程序100%没有javascript工作,所以我不希望我的URL /链接说/albums/#1/edit,我希望它是/albums/1/edit在JS中覆盖它.
我想我创建普通的URL并jQuery.live用来调用router.navigatebackbone.js
我从来没有这个工作,但是,当我调用router.navigate('/albums/2', true)URL更改但我的show动作从未被调用.如果我刷新它的名字,那么路线就匹配了.
我错过了什么?
nra*_*itz 18
基本的答案是令人沮丧的,"没有首选方式!".Backbone.js不会告诉您如何设置链接,您可以按照自己喜欢的方式进行操作.我发现这种灵活性和你一样烦人,至少在开始时如此.
所以这就是我在当前项目中接近这个问题的方式,并且(大)警告说这只是Backbone中做事的众多方法之一:
在大多数情况下,我不使用实际链接.没有明确的理由不这样做,但这意味着你必须跟踪一堆必须一致的URL字符串.我宁愿在我的路由器中粘贴所有的URL格式,也不要在其他地方处理它.
要打开一个新的"顶级"视图,比如编辑屏幕,我会设置触发事件的内容.在我目前正在开发的应用程序中,我有一个全局的State模型,并打开一个我称之为的新视图state.set({ topview: MyTopView }).这会导致state对象触发change:topview.
顶级视图更改时需要更改的UI的任何部分都绑定了更新方法change:topview.当事件触发时,它们会state.get('topview')根据需要查看并更新.
我将我的路由器视为UI的边缘专用部分 - 它们本质上是在浏览器地址栏中呈现的视图,而不是窗口.与其他视图一样,它们更新stateUI事件上的对象(即新URL),并且像其他视图一样,它们会侦听state对象以查找导致它们更新的更改.编辑屏幕具有URL的逻辑albums/<albumid>/edit完全封装在路由器中,我不会在其他任何地方引用它.
这对我很有用,但它为Backbone结构添加了一个全新的模式,全局State对象,所以我很难称之为"首选"方法.
更新:还要注意.url(),在Backbone惯用法中,指的是后端API中的模型URL ,而不是前端URL(它不像Django的get_absolute_url).默认的Backbone设置中没有方法为您的模型提供面向用户的URL - 您必须自己编写.
此外,我正在尝试使我的应用程序100%没有javascript工作; 所以我不希望我的URL /链接说
/albums/#1/edit,我想要它/albums/1/edit并在JS中覆盖它.
你可以用w/pushState完成这个.只需在Backbone.history.start调用中启用它:
Backbone.history.start({pushState: true})
这告诉Backbone使用HTML5历史API(又名"PushState"),它使用完全像您想要的完整URL.
阅读历史api:http://diveintohtml5.ep.io/history.html
我写了一个关于使用pushstate的2部分系列,第二部分专注于脊柱的渐进增强,以满足你的需要:
和
希望有帮助:)
| 归档时间: |
|
| 查看次数: |
9647 次 |
| 最近记录: |