Backbone.js哈希值在默认值上自动更改

时间:2012-04-19 12:09:51

标签: javascript jquery backbone.js

问题是:当我转到第2步。 step2很好,之后由于某种原因“开始”路线活跃。如何解决这个问题?

情景如下。我从第一步开始 - >转到第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会更改为默认值。所以而不是网址...#!/ step2它改为url ...#我认为这就是为什么路由器开火“开始”。但我不明白 - 改变了什么东西。

UPD 现在按以下顺序运作:

  1. Step1View.gotoStep2
  2. Router.step2
  3. WizardView.render
  4. Step2View.initialize
  5. Step2View.render
  6. router.start
  7. router.start显然不应该被调用

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题,现在正在跳舞胜利跳汰机)))
问题是我的Step2按钮。它本身就是一个链接(锚),它有 href =“#”。所以在我按下它并且所有的scrips工作正常后,它将我的url更改为a.href值。这就是应用默认网址的原因