我开始重构一些“遗留”代码,由于脚本的一个或两个特定参数,许多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 part并单击enter时,它工作正常,但是当用户被重定向到带有#...部分的页面并且Spinejs不工作时会出现问题第一次事件调用。
是否有可能告诉Spine现在应该使用当前的url,所以spine不会等待任何事件?像自动启动或onload触发器?
----------------------------- edit ----------------- -------------
我找到了肮脏的解决办法:
不幸的是,在重定向的情况下再花费一页请求。
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;
}
答案 0 :(得分:0)
无法在文档中找到解决方案。
我所做的是强迫导航到“家”
Spine.Route.setup();
Spine.Route.navigate("/"); // force to go "home"
答案 1 :(得分:0)
对于任何可能在将来偶然发现此事的人,请尝试在初始路由器设置中添加计时器:
setTimeout (-> Spine.Route.setup()), 200