5

我无法让 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 发生变化时,只要新路由对应于声明的路由之一,那么我应该在控制台日志中看到相关消息。

但我没有。

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

如果我那时

  • 单击指向 [my url]/#/another/1/ 的链接
  • 在地址栏中手动输入 [my url]/#/another/1/ 并按 <Enter>

...没有任何反应,我没有看到第二条路线的消息。

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

我是否误解了,或者当超链接或键盘更改 URL 哈希时,Sammy 不应该注意到,然后采取相应的行动?还有什么我需要添加到我的脚本中的吗?

4

1 回答 1

7

每个 sammy 应用程序都需要附加到一个 DOM 元素。

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

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

<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元素上。

现场演示

于 2013-04-30T16:09:39.393 回答