0

我开始重构一些“遗留”代码,其中许多 js 文件由于脚本的一两个特定参数而重复。我的想法是将所有文件合并为一个,删除代码重复并根据路由区分这些参数。我想使用 Spine.js

示例代码:

$(function () {

    var SApp = Spine.Controller.create({
        init:function () {
            this.routes({
                "product/direct":function () {
                    pId = $('#product-id').val();
                    magicFunction(pId);
                },
                "product/suggested":function () {
                    products = $('#parent-products').find('li');
                    $.each(products, function (index, product) {
                        pId = $(product).attr('data-id');
                        magicFunction(pId);
                    });                    
                }
            })
        }
    });

    Spine.Route.setup();
    new SApp();
});

每条路线都是一个单独的页面

<a href="/page1.html#product/direct">1</a>   
<a href="/page2.html#product/suggested">2</a>

当我第一次访问页面 /page2.html 然后粘贴 #product/direct 部分并单击 enter 时它工作正常,但是当用户被重定向到带有 #... 部分的页面并且 Spinejs 在第一次事件调用之前无法工作时会出现问题.

是否可以告诉 Spine 现在应该使用当前的 url,所以 Spin 不会等待任何事件?诸如自动启动或加载触发器之类的东西?

- - - - - - - - - - - - - - - 编辑 - - - - - - - - - - ----------
我找到了肮脏的解决方案:
不幸的是,在重定向的情况下,它需要多花一个页面请求。

if (app.config.startAction) {
    location = window.location.href;
    if (location.indexOf('#') > 0) {    //if user reload a page
        location = location.split('#')[0];
        window.location.href = location;
    }
    window.location.href = location + '#' + app.config.startAction;
}
4

2 回答 2

0

在文档中找不到解决方案。

我所做的是强制导航到“家”

Spine.Route.setup();
Spine.Route.navigate("/"); // force to go "home"
于 2013-03-02T02:22:10.700 回答
0

对于将来可能偶然发现此问题的任何人,请尝试在初始路由器设置中添加一个计时器:

setTimeout (-> Spine.Route.setup()), 200
于 2013-11-30T01:35:51.680 回答