2012-04-19 50 views
0

问题是:当我去第二步。步骤2更好,之后由于某种原因“启动”路线激活。如何解决这个问题呢?Backbone.js的自动混编网址变化对默认值

的场景下。我从第一步开始 - >进入第二步 - >它呈现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:所有下一个视图渲染到与上一个相同的位置。在步骤2之后,出于某种原因将网址更改为默认值。所以而不是网址...#!/ step2它改变为网址...#我认为这就是为什么路由器启动“启动”。但我不明白 - 什么东西改变网址。

UPD现在的作品按以下顺序:

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

router.start显然不应该叫

+0

在你的路线,你已经得到了'this.vizardView'但你的对象再次声明'wizardView' – tkone 2012-04-19 12:32:49

+0

认罪,评价的问题。我做了一些编辑。真正的代码足够长,没有人会被读取200行代码 – Ph0en1x 2012-04-19 12:39:21

+0

'this.vizardView'设置在哪里?为什么你仍然有'this.vizardView'你的路由器对象的属性是'wizardView'?如果您遇到路由器问题,请向我们展示您的所有路由器代码。如果我们需要更多,我们会要求更多。但是现在你的路由器根本无法基于你上面的代码工作。 – tkone 2012-04-19 12:42:25

回答

0

我解决这个问题,最后,现在跳舞胜利夹具)))
问题是由我的第二步按钮致毒。这是一个链接(锚)本身,它有href =“#”。所以当我按下它,所有脚本工作正常,它将我的网址更改为a.href值。那就是为什么默认网址应用