【问题标题】:Dynamic controllers based on route's model in Ember.jsEmber.js 中基于路由模型的动态控制器
【发布时间】:2014-11-13 19:22:33
【问题描述】:

所以,我正在寻找一些帮助,让我的 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')

提前感谢您对最佳方法的任何启发!

【问题讨论】:

  • 根据命名约定或问题路径应命名为QuestionRoute,而不是QuestionRouter。是不是打错字了?
  • 谢谢你的发现 - 只是一个错字!

标签: ember.js


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多