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現在的作品按以下順序:
- Step1View.gotoStep2
- Router.step2
- WizardView.render
- Step2View.initialize
- Step2View.render
- router.start
router.start顯然不應該叫
在你的路線,你已經得到了'this.vizardView'但你的對象再次聲明'wizardView' – tkone 2012-04-19 12:32:49
認罪,評價的問題。我做了一些編輯。真正的代碼足夠長,沒有人會被讀取200行代碼 – Ph0en1x 2012-04-19 12:39:21
'this.vizardView'設置在哪裏?爲什麼你仍然有'this.vizardView'你的路由器對象的屬性是'wizardView'?如果您遇到路由器問題,請向我們展示您的所有路由器代碼。如果我們需要更多,我們會要求更多。但是現在你的路由器根本無法基於你上面的代碼工作。 – tkone 2012-04-19 12:42:25