Ember.js向导控制

时间:2013-02-05 07:00:39

标签: ember.js

我有一个带有许多步骤的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。

我更喜欢使用渲染帮助器之类的东西,它在渲染内容时保留上下文,但我认为不可能以这种方式替换整个视图。

有人能提出更好的方法吗?

1 个答案:

答案 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参数设置模型,因此覆盖模型可让您控制该功能。