Ember.js - 如何在更多路线之间共享路线模型 - 数据? - 为什么不在组件中加载数据?

时间:2016-08-16 16:48:41

标签: javascript angularjs ember.js

TL; DR Embers组件只是智能HTML模板。为什么他们不像Angular那样为自己取得数据呢?以及如何在更多的URL /页面上共享路由模型。似乎我必须知道哪个组件放在哪个URL上,我必须使它们成为路由模型上可用的数据。为什么这部分不在组件中?

我现在在Ember.js学习。我至少尝试过。 目前,我有一个很大的问题需要理解为什么Ember.js就像它一样。如果我在某些陈述中出错,请纠正我。我是Ember.js的初学者。所以也许我说的不正确。

假设我们在/上有一个请求,然后Ember尝试在app/routes/index.js中找到路由模型,此文件包含我想从后端获取的数据的代码。接下来Ember将在此文件中呈现app/templates/index.hbs我有一个名为car-list的组件。

到目前为止没有任何问题,但让我们仔细看看。对我来说,我自己必须首先获取数据,为什么组件本身不会这样做,这感觉很奇怪?接下来的问题是如何在更多路由之间共享模型获取逻辑?也许我想将我的组件放在许多URL /页面/路由上然后我必须复制路由模型逻辑?

在我看来,组件应该自己获取数据,您可以轻松地将组件插入到其他页面上,而无需复制整个路径模型获取逻辑。

所以我必须知道哪些组件放在哪个URL上,我必须使它们成为路由模型上可用的数据。为什么这部分不在组件中?

所以也许我对Ember不够好,我只是忽略了什么?

2 个答案:

答案 0 :(得分:3)

组件非常灵活。组件已经成为可重用的。例如,您可以创建一个表组件并用于汽车,船舶等。

因此,为了可重用性,您可以更好地将模型提供与组件分开。

但是如果你想创建一个当前项目的组件并且需要自己获取它的数据,你可以获取组件中的数据。

在某些情况下,您可能希望获取路径中的数据。例如,在您的页面中,您有多个组件,每个组件都需要在路径中获取数据模型的投影。

所以这取决于你的要求,也许你需要获取组件或路由中的数据,甚至两者(混合)

答案 1 :(得分:1)

组件当然可以加载自己的数据,并且在许多情况下是合适的。但允许路由加载数据有几个重要的好处,如果你坚持这种模式,你可以“免费”获得:

  • 您的应用程序的URL将始终反映数据的状态。您不必记住同步它(在两个方向 - 更改URL应更改数据,更改数据应更改URL)。
  • 您可以编写模板,知道在数据存在之前它们不会呈现,允许Ember为您处理异步。这样可以生成更简洁,更简单的模板。
  • 当数据无法加载时,您将获得Ember的内置错误处理。

无论如何,许多页面上显示的用户名组件通常在路由层次结构中都相当高,例如在application模板中,它很容易加载&从一个地方渲染一次,让它在每个儿童路线上都可见。

但是如果你确实需要在很多地方使用一个组件,并且它的数据应该是自包含的,那么让它自己加载就可以了。在这种情况下,您可以依靠Ember Data的存储来为您提供缓存响应(因此您只是第一次触发网络请求)或编写处理组件持久状态的服务。