基于Ember.js中路线模型的动态控制器

时间:2014-11-13 19:22:34

标签: ember.js

所以,我正在寻找帮助让我的Ember路线根据模型中的属性动态设置控制器/模板。基本上我是从Rails加载一个基于STI的模型然后我想模仿STI通过利用控制器和模板来处理不同类型模型的不同功能(数据的结构是相同的所有类型)。

我尝试了afterModel钩子,将计算属性传递给模型的controllerName属性,以及我能想到的所有内容。这是我正在尝试做的一个例子(当我这样做时,浏览器就会冻结):

App.Question = DS.Model.extend
  type: DS.attr('string') # Can be 'MultipleChoiceQuestion' or 'ShortAnswerQuestion'
  text: DS.attr('string')

App.MultipleChoiceQuestionController = Ember.ObjectController.extend()

App.ShortAnswerQuestionController = Ember.Object.Controller.extend()

App.QuestionRoute = Ember.Route.extend
  model: (params) -> store.find 'question', params.question_id
  afterModel: (question, transition) ->
    type = question.get('type')
    @set('controllerName', type)

我也尝试了以下各种变体:

App.QuestionRoute = Ember.Route.extend
  model: (params) -> store.find 'question', params.question_id
  controllerName: Em.computed 'currentModel', ->
    @currentModel.get('type')

提前感谢任何有关最佳方法的启示!

1 个答案:

答案 0 :(得分:0)

不知道我改变了什么,但经过console.log多次使用afterModel挂钩设置controllerName属性。我能够在renderTemplate钩子中使用类似的方法根据模型的type属性动态设置我的模板......