我的应用程序中有一个主要主页,每个帖子的另一个页面可以通过主页中显示的列表进行访问..
这就是我的路由器的样子:
var AppRouter = Backbone.Router.extend({
initialize: function(){
this.model = new model();
this.collection = new collection();
},
routes: {
"" : "showForm",
"post/:id" : "showPost"
},
showPost: function(id){
var curmodel = this.collection.get(id);
var post = new postView({model:curmodel});
post.render();
$(".maincontainer").html(post.el);
},
showForm : function(){
var qcView = new qcV({model:this.model, collection:this.collection});
qcView.render()
$(".maincontainer").html(qcView.el);
}
});
这是此列表中帖子的链接之一
<h2><a id= "<%=_id%>" href="#post/<%=_id%>"><%=name%></h2></a>
我的第一个问题是:以这种方式将页面与基于散列的URL链接起来是否危险?
我的第二个问题是:如果我点击主页中的一个链接,我可以导航到帖子视图。我的网址成功更改为http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034
,并且呈现了特定帖子的视图。但是,如果我刷新页面,或者直接在我的URL栏中键入http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034
,路由器中showPost方法中的this.collection.get(id)
方法将返回undefined
。任何人都可以帮我弄清楚为什么会这样吗?
我检查过几次我的initialize方法被调用,并且我的集合和模型已成功创建
答案 0 :(得分:3)
对于#2,您很可能无法在“post”路线上获取该集合。尝试获取集合(如果它不存在),然后调用render。那应该是诀窍!
答案 1 :(得分:2)
我认为@Trunal在第二个问题的正确道路上。对于第一个,不,它不是“危险的”。您并没有真正做到与使用传统服务器端应用程序不同的任何事情,通过GET将信息传递到服务器以检索信息。在我看来,这应该是实现路由的首选方法(而不是试图手动触发backbone.history.navigate
,因为它避免了可能发生的各种设置和事件问题。)