【问题标题】:Loading a model instance with ember data external to an ember app使用 ember 应用程序外部的 ember 数据加载模型实例
【发布时间】:2013-11-15 21:19:23
【问题描述】:

我正在尝试将 ember 应用程序添加到现有(大型)rails 应用程序中。如果可行,我想在应用程序的许多新领域使用 ember,但我从小处着手。

基本上,用户在 Rails 学生索引页面上,单击多个链接之一来管理学生的 IEP,然后显示包含 ember 应用程序的模式框。当我们在 5 月第一次增加这个值时,我们是这样做的:

showDialog: (url) ->
  studentId = ...
  $('#emberDialog').dialog
    open: ->
      student = App.Student.find(studentId)
      App.Router.router.transitionTo('studentIeps.index', student)

现在我们又重新开始了,我发现从 Ember V1.0.0-rc.5-80-gf54e8ef 到 V 1.1.3+pre.e0ffbf84 和从 V0.13 开始的 Ember-data -30 到 V1.1.0-beta.3-4 的 Model.find 方法已被删除。

是否有受支持的方式来执行此操作?我正在尝试构建 ember 应用程序外部的模型实例,然后使用它来设置 ember 应用程序的当前路线。哈普?

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您可以从容器中获取应用程序控制器的实例,然后您可以从那里执行您之前执行的所有操作。控制器上有一个 store 的实例,这就是你现在获取模型的方式。您的数据/适配器可能还有其他问题,请参阅转换文档:https://github.com/emberjs/data/blob/master/TRANSITION.md

    showDialog: (url) ->
      studentId = ...
      $('#emberDialog').dialog
        open: ->
          appController = App.__container__.lookup('controller:application')
          store = appController.get('store')
          student = store.find('student', studentId)
          appController.transitionToRoute('studentIeps.index', student)
    

    【讨论】:

    • 虽然这现在可以工作,但我不确定我是否愿意将其部署到生产中。 App.__container__.lookup() 是对内部结构的一次重大破解。 Ember 数据是否完全删除了公共 api 以访问外部存储?或者也许有更好的方法在 ember 应用程序之外获取模型实例?
    • 我能理解您的担忧。双 __ 看起来很老套,这是理所当然的。 Yehuda 不希望人们接触外部世界的内部;)以当前方式使用路由器是在玩 ember 的内部。这不是他们网站上讨论或记录的公共钩子。此外,他们故意只将 store 提供给控制器/路由,以避免人们不恰当地使用 store(也就是在视图层、内部组件等)。
    • 所以,这个问题的真正答案是“Ember 不再支持这个”。谢谢,这实际上正是我需要知道的:)
    • 是的,抱歉我没有说清楚。他们不鼓励这样做,但您仍然可以使用内部组件来实现它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2017-02-03
    • 1970-01-01
    • 2017-11-07
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多