Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Backbone.js中防止路由?_Javascript_Backbone.js_Backbone Events_Backbone Routing - Fatal编程技术网

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>