我有一个带有许多步骤的ember.js向导控件。
ember模型对象在向导的每个阶段都设置了各种属性。
我能看到更改视图的唯一方法是使用linkTo helper,如下所示:
{{#linkTo steps.two model}}Step 2{{/linkTo}}
但是这对我来说并不好,因为我需要每一步都链接到一个动态路线:
@resource "steps", ->
@route "one", {path: 'one/:model_id'}
@route "one", {path: 'two/:model_id'}
#etc.
动态路由不好,因为在向导结束之前不会保存模型。如果我尝试使用transitionTo来传递模型,那么url显然会被搞砸,因为它在模型上调用了tostring。
我更喜欢使用渲染帮助器之类的东西,它在渲染内容时保留上下文,但我认为不可能以这种方式替换整个视图。
有人能提出更好的方法吗?
答案 0 :(得分:6)
您不必在路径中使用model_id。您只需要覆盖路由中的model属性。一个基本的是:
@resource "steps", ->
@route "one", {path: 'one'}
@route "two", {path: 'two'}
Redbot.StepsRoute = Ember.Route.extend({
model: function() {
return App.User.createRecord({});
}
});
Redbot.StepsOneRoute = Ember.Route.extend({
model: function() {
return this.modelFor('steps');
}
});
Redbot.StepsTwoRoute = Ember.Route.extend({
model: function() {
return this.modelFor('steps');
}
});
每个子路由只使用父路由中定义的模型。
默认情况下,ember所做的只是使用model_id参数设置模型,因此覆盖模型可让您控制该功能。