【问题标题】:Multiple component with multiple models具有多个模型的多个组件
【发布时间】:2016-07-05 15:27:59
【问题描述】:

所以,我正在构建一个 EmberJS 应用程序,并且我有一个包含多个组件(例如 messagesquestions)的路由。

每个组件都使用dyn-widget mixin 进行扩展,允许用户在屏幕上拖动它,因为它们作为画布上的窗口呈现给用户。

为了存储每个 dyn-widget 窗口的信息,我使用了三个 Ember Data 模型:一个 dyn-widget 存储任何小部件共享的值(位置、大小...),以及一个 dyn-widget/questions 和一个 @987654327 @ 包含有关如何设置小部件以及与“父”dyn-widget 模型的一对一关系的附加信息。

路由有一个相应的控制器,允许用户启动新窗口。然后控制器创建一个dyn-widget/whatever 模型以及关联的dyn-widget 模型,所有内容都存储在本地存储中。

但是,当我尝试在路由中实现 model() 函数时,我发现如果没有 hacky 解决方案,我真的无法返回多个不同的模型。我曾想过将模型直接放入我的组件中,但这打破了以下模式:

Components are isolated entities that consume data through their
interface, react to data changes that flow via data binding, and 
possibly send up named actions.

那么我应该如何处理呢?解决这个问题的非 hacky、Ember 方法是什么?

谢谢!

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    Ember by convection 中的模型不能为一条路线返回多个模型是不正确的。如果您查看文档

    https://guides.emberjs.com/v2.6.0/routing/specifying-a-routes-model/#toc_multiple-models

    您可以使用 Ember.RSVP.hash 来解析多个资源

    示例路由器代码:

    model(params) {
      return Ember.RSVP.hash({
        messages: this.store.findAll('message'),
        questions: this.store.findAll('question')
      });
    },
    

    通过这种方式,您可以直接从路由器为您的组件提供来自多个模型的数据 - 因此模式是组件获取数据并将操作发送到路由或控制器。

    这是一种标准的做事方式,从 1.x 版本开始就在 ember 中

    希望对你有帮助。

    【讨论】:

    • ...该死的你是对的。实际上,我发现我之前可以使用Ember.RSVP.hash,但我放弃了它,因为我忘记了存储返回的承诺(我猜是厌倦了并且使用非异步存储的适配器这样做,我猜),所以我把它作为一个黑客丢弃了。非常抱歉,非常感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 2016-09-06
    • 1970-01-01
    • 2021-06-05
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    相关资源
    最近更新 更多