问题是:当我转到第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会更改为默认值。所以而不是网址...#!/ step2它改为url ...#我认为这就是为什么路由器开火“开始”。但我不明白 - 改变了什么东西。
UPD 现在按以下顺序运作:
router.start显然不应该被调用
答案 0 :(得分:0)
我终于解决了这个问题,现在正在跳舞胜利跳汰机)))
问题是我的Step2按钮。它本身就是一个链接(锚),它有 href =“#”。所以在我按下它并且所有的scrips工作正常后,它将我的url更改为a.href值。这就是应用默认网址的原因