【问题标题】:SammyJS does not always fire routeSammyJS 并不总是触发路由
【发布时间】:2013-10-14 20:20:15
【问题描述】:

我目前正在使用 sammyjs + knockoutjs 在小型 SPA 上进行开发。

我有一个包含路由机制的 index.html 和一个 id 为“main”的 div。

在我简化为问题的示例中,有一个页面 1 和页面 2 使用部分加载 html 页面。特定的 html 页面具有剔除绑定。

问题:当我使用链接在页面之间切换时,路由并不总是触发。当使用适当的链接重新加载页面时,它会触发并加载没有问题。

我尝试将它放入 JSBin:

http://jsbin.com/ufOroze/3/edit?html,js,console,output

当您单击链接时,它们实际上应该从远程 html 文件(p1.html 和 p2.html)加载一些内容——尽管这不适用于 JSBin。反正。您会看到并不总是触发的调用以及控制台上的链接。

我还在我的服务器上放了一个示例。您还可以在此处找到包含整个示例的 zip 文件的链接:http://www.tomgrill.info/sammy_test/sammy_test.zip

有人有想法吗?我是否误解了 sammyjs 的概念,是否有错误?

最好的,汤姆

【问题讨论】:

    标签: knockout.js sammy.js


    【解决方案1】:

    为什么不收获knockout的力量,让它为你渲染#main div,现在你混合了knockout和jQuery。

    我为 KO 制作了一个轻量级的 SPA 引导程序,这是一个演示项目

    https://github.com/AndersMalmgren/Knockout.Bootstrap.Demo

    它以约定优于配置的方式为您处理模板。

    编辑: 显示如何在任何后端进行设置的 Wiki

    https://github.com/AndersMalmgren/Knockout.Bootstrap/wiki

    基本上你需要公开一个返回模板的 REST 服务

    【讨论】:

    • 嗨。我看了你的代码。很棒的方法。你是否也有它的纯 HTML/Javascript/Knockout 版本。真的很有帮助(因为我不在 Windows 上,也不使用 Visual Studio)。提前谢谢!
    【解决方案2】:

    试试这个:-

    app = $.sammy('body', function (context) {
        this.get('#/', function () {
            console.log('Clicked');
            this.app.swap('sammy test');
        });
        this.get('#/:id', function () {
            console.log('Clicked');
            var id = this.params.id;
            ko.unapplyBindings($('#main'), false);
            this.partial('pages/' + id + '.html');
        });
    
    
    });
    

    【讨论】:

    • 不幸的是,这不起作用。我只想更改 div (#main) 的内容。
    • 弄清楚它是如何工作的。方法是正确的。只需重置要加载的特定页面中设置的变量,以便能够重新建立 ko 绑定。这不好,因为每次交换页面时都必须重新初始化数据。但它有效。 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多