问题是:当我转到第 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现在按以下顺序工作:
- Step1View.gotoStep2
- 路由器.step2
- WizardView.render
- Step2View.initialize
- Step2View.render
- 路由器启动
router.start 显然不应该被调用