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