Javascript 如何在Backbone.js中防止路由?
当我从第一页单击“取消”时,一切正常。但是当我 移到“第二页”。在这种情况下,路由器将应用程序重定向到“”路由。 我需要阻止这种重定向 “取消”-隐藏链接,“第二页”-移动到第二页Javascript 如何在Backbone.js中防止路由?,javascript,backbone.js,backbone-events,backbone-routing,Javascript,Backbone.js,Backbone Events,Backbone Routing,当我从第一页单击“取消”时,一切正常。但是当我 移到“第二页”。在这种情况下,路由器将应用程序重定向到“”路由。 我需要阻止这种重定向 “取消”-隐藏链接,“第二页”-移动到第二页 <script type="text/html" id="template"> <a href="#" class="cancel">Cancel</a> <a href="#second">Second page</a> </scri
<script type="text/html" id="template">
<a href="#" class="cancel">Cancel</a>
<a href="#second">Second page</a>
</script>
<div id="container"></div>
<script>
var View = Backbone.View.extend({
template: $('#template').html(),
events: {
"click .cancel": "cancel"
},
cancel: function () {
this.$el.hide();
},
render: function () {
this.$el.html(this.template);
return this;
}
});
var AppRouter = Backbone.Router.extend({
routes: {
"": "first",
"second": "second"
},
var View=Backbone.View.extend({
模板:$(“#模板”).html(),
活动:{
“单击。取消”:“取消”
},
取消:函数(){
这个。$el.hide();
},
渲染:函数(){
this.$el.html(this.template);
归还这个;
}
});
var AppRouter=Backbone.Router.extend({
路线:{
“”:“第一”,
“第二”:“第二”
},
创建视图并替换容器的html
links: function () {
var view = new View;
$('#container').html(view.render().el);
},
second: function () {
this.links();
$('#container').prepend("<h1>Second page</h1>");
},
first: function () {
this.links();
$('#container').prepend("<h1>First page</h1>");
}
});
$(document).ready(function () {
app = new AppRouter;
Backbone.history.start();
});
</script>
链接:函数(){
var视图=新视图;
$('#container').html(view.render().el);
},
第二:功能(){
这是links();
$(“#容器”).prepend(“第二页”);
},
第一:函数(){
这是links();
$(“#容器”)。前缀(“第一页”);
}
});
$(文档).ready(函数(){
app=新批准人;
Backbone.history.start();
});
我认为您应该从cancel处理程序返回false,以防止导航到
:
说:
从事件处理程序返回false将自动调用
event.stopPropagation()和event.preventDefault()
您还可以通过可重用的方式解决阻塞散列havigation问题,如本答案中的: 此解决方案可防止主干路由器回调触发,尽管它只能在哈希更改后运行,但此函数会将上一个哈希片段设置回原来的位置,以便不会被注意到
另外,对于这个exeact问题,您只需从
<a href="#">...</a>
到
。。。
它将充当普通的HTML锚定标记(例如,光标设置为
指针
),但不会导航到任何地方,如果这不起作用怎么办?在函数开始时,我已经使用了e.preventDefault();但路由器仍在启动中,格雷迪发现了它无法工作的原因。这是因为我的观点没有定义el。示例:var view=Backbone.view.extend({el:$(“#anElement”)等…})@SKuijers:BB 0.99:“如果您想等到运行时再定义它们,那么像标记名
、el
和事件
这样的属性也可以定义为函数。”
<a href="#">...</a>
<a>...</a>