骨干:刷新当前路线

问题描述 投票:20回答:2

我注意到骨干路由器导航方法不会重新加载当前路径。

例如,当前路线是/view1,你打电话给router.navigate('view1',{trigger:true});。它不会再次激活路线事件。

这是我测试的代码:

<html>
<head>
    <title>Testing123</title>
    <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
    <script src="http://underscorejs.org/underscore-min.js" type="text/javascript"></script>
    <script src="http://backbonejs.org/backbone-min.js" type="text/javascript"></script>
    <style type="text/css" media="screen">
        #box{
            width:400px;
            height:400px;
            background-color:red;
        }       
    </style>
</head>
<body>
    <button id='view1'>view1</button>
    <button id='view2'>view2</button>
    <br/>
    <div id='box'>

    </div>
    <script type="text/javascript" charset="utf-8" async defer>
        var SystemRouter = Backbone.Router.extend({

          routes: {
            "view1":"view1",
            "view2":"view2"
          },

          view1: function() {
            console.log('view1');
          },

          view2: function() {
            console.log('view2');
          }

        });

        var sys = new SystemRouter();
        Backbone.history.start({pushState: true, root: "/test/routing.html#/"});
        sys.navigate('view1');

        $('#view1').click(function(){
            sys.navigate('view1',{trigger:true});
        });

        $('#view2').click(function(){
           sys.navigate('view2',{trigger:true});
        }); 
    </script>
</body>
</html>

上面的代码将加载/view1路径,打印出'view1'。但是,如果您尝试单击按钮导航到/view1路径,它将被忽略。

我的问题是:如果它与当前路径相同,我如何调用路由事件?

backbone.js
2个回答
32
投票

有几件事可以实现这一目标。如果您预计导航到已在URL中的路径,则首先使用Backbone.history.fragment检查当前路径片段,并查看它是否与您要激活的路径相同。如果是这样,那么您可以执行以下任何操作:

  1. 你可以直接调用route方法:sys.view1();
  2. 您可以将片段设置为另一个死路径,然后返回到您想要的路径。 sys.navigate('someDeadRoute'); sys.navigate('view1',{trigger: true});
  3. 您可以停止并重新启动路由器: Backbone.history.stop(); Backbone.history.start() 这将再次拾取路线并运行它。

我想我会选择#1。


27
投票

您可以调用qazxsw poi,而不是启动和停止Backbone历史记录。

要刷新当前页面:

Backbone.history.loadUrl

或者作为链接处理程序:

Backbone.history.loadUrl(Backbone.history.fragment);
© www.soinside.com 2019 - 2024. All rights reserved.