0

問題は次のとおりです。ステップ2に進むとき。step2はよく燃え、その後何らかの理由でルートがアクティブになります。この問題を解決する方法は?

シナリオは次のとおりです。ステップ1から開始->ステップ2に進みます->step2viewをレンダリングし、すぐにルートを再開します。そのような行動の理由は何ですか?

以下のショートコード。

マークアップが最小限のシンプルなページがあります

<div id="contentHolder">
</div>

そしてまたいくつかのバックボーンのもの

 var StateModel = Backbone.Model.extend({
        defaults: { state: "start" }
    });

    var StepModel = Backbone.Model.extend({
        defaults: { selected: [], location: null }
    });

    var WizardView = Backbone.View.extend({
        router: null,

        nestedViewModels: [],

        initialize: function () {
            this.model.bind("change", this.render, this);
            this.render();
        },

        render: function () {
            switch (this.model.get("state")) {
                case "start":
                case "step1":
                    var step1 = new Step1View({el: $("#contentHolder")});
                    break;
                case "step2":
                    var step2 = new Step2View({el: $("#contentHolder")});
                    break;
                case "step3":
                    var step3 = new UploadView({el: $("#contentHolder")});
                    break;
            }
        }
    });

var Step1View = Backbone.View.extend({
       goToStep2: function(){
         router.navigate("!/step2", true);
       }
    });
    var Step2View = Backbone.View.extend({    
    });

//wizard - is a global variable
var Router = Backbone.Router.extend({

    routes: {
        "": "start",
        "!/step1": "step1",
        "!/step2": "step2"
    },

    start: function () {
        wizard.model.set("state", "start");
    },

    step1: function () {
        wizard.model.set("state", "step1");
    }

    step2: function () {
        wizard.model.set("state", "step2");
    }
});

リストされているのはメインコードのみで、多くの補助コードはスキップされています。必ず-すべてのオブジェクトが割り当てられています。何度もチェックしています。

UPD:次のすべてのビューは前のビューと同じ場所にレンダリングされます。そして、Step2がレンダリングした後、何らかの理由でURLがデフォルトに変更されます。したがって、url ...#!/step2の代わりにurl...#に変更されます。これが、ルーターが「開始」する理由だと思います。しかし、私にはわかりません-何がURLを変更するのか。

UPDは、次の順序で機能するようになりました。

  1. Step1View.gotoStep2
  2. Router.step2
  3. WizardView.render
  4. Step2View.initialize
  5. Step2View.render
  6. router.start

router.startは明らかに呼び出されるべきではありません

4

1 に答える 1

0

私はついにこれを解決し、今は勝利のジグを踊っています)))
問題は私のStep2ボタンによって引き起こされました。それ自体がリンク(アンカー)であり、href = "#"があります。そのため、それを押してすべてのスクリプトが正常に機能した後、URLをa.href値に変更します。そのため、デフォルトのURLが適用されました

于 2012-04-20T09:03:04.063 に答える