2

我从 Polymer 2.0 开始,我有一个无法找到答案的设计问题,希望您能帮助我。

关键是我正在开发一个任务管理器系统,该系统使用外部 api(在本例中为 laravel)来启动/停止任务、编辑或创建新任务等。

我找不到的是处理业务特定逻辑的最佳方法,因为据我所知,聚合物元素应该是可重用的,并且在聚合物元素中包含 api 调用和其他功能似乎不是最好的解决方案,虽然它是最简单的。

我有几个选择:

  • 使用来自顶级 JS 类的自定义事件来管理所有内容,这些事件会进行 api 调用并更新 Polymer 元素。
  • 使用 mixins 从 Polymer Element 和包含所需方法/逻辑的自定义 Task 类扩展。
  • 将 Task 对象传递给 Polymer Element 并将其保存为属性并通过它调用方法。

谁能告诉我哪个是最好的方法?虽然我确信这不会是我所说的三个中的任何一个:)

谢谢!

4

1 回答 1

5

有几种方法

1)使用标签读取和修改数据(live db)

// firebase example
<firebase-query
    id="query"
    app-name="notes"
    path="/notes/[[uid]]"
    data="{{data}}">
</firebase-query>

<template is="dom-repeat" items="{{data}}" as="note">
  <sticky-note note-data="{{note}}"></sticky-note>
</template>

使用它您可以访问 {{data}} 并对其进行修改。因此,如果您删除一条注释,它将在服务器和所有其他连接的客户端上自动删除(您可以通过像 firebase 这样的实时数据库获得的一项功能)=> 参见https://www.webcomponents.org/element/firebase/polymerfire /firebase 查询

据我所知,您将使用 php 为数据创建一个 api,对吗?所以实时数据库是不可能的。所以

2)使用标签读取(和修改)数据

可能最好的方法是为您需要的东西创建一个数据提供者,例如

<data-notes notes="{{notes}}"></notes>
<data-comments comments="{{comments}}" for="[[currentNote]]"></notes>

因此,您仍然可以轻松访问 {{notes}} 和 {{comments}}。

您如何处理更新取决于您的用例。例如,您可以在数据处理程序中使用 changeEvents 通过 fetch 或 iron-ajax 动态执行 api 更新。

或者您可以使用表单执行“正常”发布请求并触发数据提供者获取新数据。

我个人喜欢完全封装我的数据,所以我不必考虑它。例如,我不在乎数据的来源和来源:p

数据源示例:

3)使用类似 Redux 的东西(用于大量动态数据)

但请记住,它添加了您必须考虑的“额外”层。

我应该什么时候使用 Redux?

通常,当您有合理数量的数据随时间变化时使用 Redux,您需要单一的事实来源,并且您发现将所有内容保持在顶级 React 组件状态等方法已不再足够。

更多 => http://redux.js.org/docs/faq/General.html#general-when-to-use

Polymer 的一个简单示例: https ://tur-nr.github.io/polymer-redux/

于 2017-03-28T13:15:40.780 回答