スクリプトの 1 つまたは 2 つの特定のパラメーターが原因で多くの js ファイルが複製されている、いくつかの「レガシー」コードのリファクタリングを開始しました。私の考えは、すべてのファイルを 1 つにマージし、コードの重複を取り除き、ルーティングに基づいてそれらのパラメーターを区別することです。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 が最初のイベント呼び出しまで機能しない場合に問題が発生します.
現在の URL を使用する必要があることを Spine に伝えることは可能ですか? 自動開始またはオンロードトリガーのようなものですか?
- - - - - - - - - - - - - - - 編集 - - - - - - - - - - ----------
私は汚い解決策を見つけました:
残念ながら、リダイレクトの場合、もう 1 ページ要求がかかります。
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;
}