简体   繁体   English

Backbone.js哈希网址会自动更改为默认值

[英]Backbone.js hashed url change automatically on default value

Problem is: When I go to step2. 问题是:当我转到步骤2时。 step2 fier well and after it for some reason "start" route active. 第2步运行良好,并且由于某种原因在此之后“启动”路由处于活动状态。 How to solve this problem? 如何解决这个问题呢?

the scenario is following. 该场景如下。 I start from step one -> going to step 2 -> it renders step2view and immediately going to start route again. 我从第一步开始->转到步骤2->它呈现step2view并立即再次开始路由。 What is the reason of such behavior? 这种行为的原因是什么?

Short code below. 下面的短代码。

I have a simple page with minimum markup 我有一个带有最少标记的简单页面

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

And also some backbone stuff 还有一些骨干的东西

 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");
    }
});

Only main code listed, much auxiliary code skipped. 仅列出了主要代码,跳过了许多辅助代码。 Be sure - all object assigned. 确保-分配了所有对象。 i check it multiple times. 我多次检查。

UPD: All next view render to the same place as previous one. UPD:所有下一个视图都呈现到与上一个相同的位置。 And after Step2 renders url change to default for some reason. 并且由于某些原因,在Step2渲染后将url更改为默认值。 so instead of url...#!/step2 it change to url...# And i think this is why router fire "start". 因此,而不是url ...#!/ step2更改为url ...#,我认为这就是路由器启动“启动”的原因。 But I don't understand - what things change url. 但我不明白-什么东西会改变网址。

UPD now it works in the following order: UPD现在按以下顺序工作:

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

router.start obviously should not be called router.start显然不应该被调用

I solve this at last and now dancing victory jig))) 我终于解决了这个,现在跳舞胜利跳汰机)))
The problem was coused by my Step2 button. 我的Step2按钮引起了问题。 It was a link (anchor) itself, and it has href="#" . 它本身是一个链接(锚),并且具有href =“#” so After I press on it and all scrips works fine it change my url to a.href value. 所以在我按下它并且所有的脚本都工作正常之后,将我的网址更改为a.href值。 Thats was why default url applied 这就是为什么应用默认网址的原因

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM