我无法使sammy.js路由按预期方式工作。

我有以下JavaScript。

(function ($) {

    var app = $.sammy('#main', function () {

        this.get('#/', function (context) {
            context.log("start page");
        });

        this.get("#/another/:id/", function (context) {
            context.log("another page with id = " + context.params["id"]);
        });
    });

    $(function (context) {
        app.run('#/');
    });

})(jQuery);

我的理解是,只要URL发生更改,并且只要新路由与声明的路由之一相对应,那么我就应该在控制台日志中看到相关的消息。

但是我没有。

页面首次加载时,我会看到“开始页面”消息。到现在为止还挺好。

如果我那么
  • 单击指向[我的网址]/#/another/1/
  • 的链接
  • 在地址栏中手动输入[我的网址]/#/another/1/,然后按

  • ...什么也没发生,即我看不到第二条路线的消息。

    但是,使用地址栏中的第二条路线,如果我现在按F5或单击浏览器的刷新按钮,则页面将重新加载并显示预期的控制台消息。

    我是否误解了,或者当超链接或键盘更改了URL哈希并随后采取相应措施时,Sammy是否应该注意?我还需要添加其他内容吗?

    最佳答案

    每个复杂的应用程序都需要附加到DOM元素。

    因此,您可能缺少页面中的#main元素。

    因此,您需要在DOM中的某处添加#main元素:

    <div id="main">
    </div>
    

    或者您需要在没有选择器的情况下初始化sammy
    var app = $.sammy(function () {
    
        this.get('#/', function (context) {
           context.log("start page");
        });
    
        this.get("#/another/:id/", function (context) {
           context.log("another page with id = " + context.params["id"]);
        });
    });
    

    在这种情况下,它将自身附加到body元素。

    Live Demo

    关于routing - Sammy路由不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16040732/

    10-12 05:12