0

问题是:当我转到第 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 更改为默认值。所以而不是 url...#!/step2 它更改为 url...# 我认为这就是路由器触发“启动”的原因。但我不明白 - 什么东西改变了 url。

UPD现在按以下顺序工作:

  1. Step1View.gotoStep2
  2. 路由器.step2
  3. WizardView.render
  4. Step2View.initialize
  5. Step2View.render
  6. 路由器启动

router.start 显然不应该被调用

4

1 回答 1

0

我终于解决了这个问题,现在跳舞胜利夹具)))
问题是由我的 Step2 按钮引起的。它本身就是一个链接(锚),它有href="#"。所以在我按下它并且所有脚本都可以正常工作后,它会将我的 url 更改为 a.href 值。这就是为什么应用默认网址

于 2012-04-20T09:03:04.063 回答