0

スクリプトの 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;
}
4

2 に答える 2

0

将来これに出くわす可能性がある人は、ルーターの初期設定にタイマーを追加してみてください。

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

ドキュメントに解決策が見つかりませんでした。

私がしたことは、強制的に「ホーム」に移動することでした

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