【问题标题】:Ember (1.1) - A composite view of several routes at onceEmber (1.1) - 一次多条路线的复合视图
【发布时间】:2013-11-16 08:12:07
【问题描述】:

假设我在 Ember 应用程序中有两条路由。这些是完全独立的路线名称“第一”和“第二”。它们有不同的数据模型和不同的操作等等。

到目前为止一切都很好。

如何 - 我们认识到应用程序的这些部分:

  1. 用户经常以交替的方式一起使用(先做某事,然后第二次做,然后先做两件事等)
  2. 他们占用了很小的屏幕空间。

在标准的服务器端应用程序中,我们假设我们可以创建一个新的仪表板控制器/视图,并在其他两个控制器中以某种方式真实地处理所有事情并显示结果。关键是 - 组合不会改变“第一”和“第二”控制器或视图

我想做同样的事情,只是在 Ember 中。我创建了this JSBIN 来说明问题。

我知道两个现有的解决方案:

  1. 仅使用现有模型(上面链接的 jsbin 中的解决方案) - 这种方法的问题很明显 - 未使用视图。
  2. 使用Component 方法 - 我认为这不太合适,因为这些不是通用的、可重复使用的组件,应该能够独立运行。

对我来说一个理想的方法是使用{{view}} 帮助器以某种方式调用视图,同时传递控制器数据。 (我在this jsbin 中尝试过,但似乎无法让它处理来自控制器的数据或正确设置路线模型)。

【问题讨论】:

    标签: javascript ember.js single-page-application


    【解决方案1】:

    在我看来,您将需要使用 {{render}} 助手

    App.CompositeRoute = Ember.Route.extend({
      model: function(){
        return {
          first: this.modelFor('first'),
          second: this.modelFor('second')
        };
      }
    });
    

    在复合材料的车把模板中

    {{render "first" model.first}}
    {{render "second" model.second}}
    

    祝你好运

    【讨论】:

    • 哈!除了render,我已经尝试了所有方法,因为我在某处读到它只能“每条路线调用一次”。无论如何:如果有人对有效的 JSBin 感兴趣:jsbin.com/ucanam/1981/edit
    • 不得不撤销“接受的答案”状态。仅当您在访问组合之前首先访问两个“单个”控制器时,上述内容才有效。否则,它们会在没有数据的情况下呈现。
    • 没关系,我根据您的 JSBin 中的响应来说明渲染的使用,这只是一个不完整的示例,当然您需要正确填充模型,我猜不出您是使用 ED 或其他什么...
    • 是的,现在很明显,但是我们如何实际填充模型而不重复呢?我们是否需要将模型生成移出路线?这方面的最佳做法是什么?
    • 你可以用apropiate函数做一个mixin来获取第一个,第二个或所有模型,然后,在路由定义上使用并调用每个路由的模型钩子中的函数,你会遇到问题如果您要返回承诺,请在 all 函数中,作为灵感阅读此github.com/emberjs/ember.js/issues/3006#issuecomment-21110139
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2017-02-26
    • 1970-01-01
    • 2015-04-12
    • 2014-12-15
    • 2016-06-04
    • 1970-01-01
    相关资源
    最近更新 更多