2012-04-19 51 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值。那就是爲什麼默認網址應用