聚合物的设计问题

A design issue with polymer

我是聚合物的新手。 目前我陷入了一个我不知道如何解决的步骤。假设我有一个 index.html,其中我使用了两个组件:<table></table><search></search>。 table 使用参数 items 保存 table 的内容。 <search></search> 基本上是根据某些搜索条件从数据库中搜索。现在如何更新 <search></search> 元素内的 from 的 item 参数。 我希望我已经说清楚了。如果没有,请问我。 谢谢

有不同的范例可以解决这个问题。一种常见的范例是保持单向数据流(称为数据向下,动作向上),这对于像 React 这样的框架来说是惯用的。 Polymer 可以处理 two-way 绑定,所以你也可以这样处理。

我会

  1. 创建一个 parent 容器来容纳您的搜索和 table 元素。
  2. 跟踪在 您的 parent 容器作为 属性
  3. 有一个更新的方法 当前项目 属性 接受一个代表 用户选择的项目
  4. 将此方法作为 属性 传递到您的 table 分量
  5. 使用 iron-ajax 组件获取您的数据并 将结果分配给您的项目参数使用另一个 iron-ajax 使用参数
  6. 进行搜索 URL
  7. 附加一个 onClick 处理程序 到你的 table 中的项目并让它调用你定义的方法 更早并将该项目用作参数
  8. 当当前项目 属性 关于 parent 组件更新,这将触发 iron-ajax 用新项目重新获取搜索查询。当。。。的时候 新数据出现时,它会自动将其向下传播到 搜索组件,它应该会自动更新。

这是使用 higher-order-component 的数据 down/actions 向上范例的示例。在这种情况下,这是您的 parent 组件。它正在协调其他 2 个组件的 updating/flow。

我添加了一个 plunkr 所以你也可以看到一个聚合物的双向绑定的例子。这与上面的说明之间的主要区别在于,我们没有将任何方法从 parent 传递到 children 以供 children 调用。相反,我们使数据绑定成为 bi-directional,这意味着如果 child 更新向下传递的 属性,更改将自动向上传播,而无需您进行干预。您通过使用花括号而不是方括号来使 prop 双重绑定,并在 child 的 属性 定义中,将 notify 属性 设置为 true。

您选择哪种方式取决于您和您的团队。一些团队发现 2 向绑定很难推理,因为使用深层嵌套的组件可能很难发现谁更改了 属性。在我看来,将一个动作传递给深层嵌套的组件也可能会造成混淆,所以我不一定反对双向绑定,它的名字也不好,因为它在其他框架中的早期实现存在性能问题,但根据我的经验,Polymer 是才不是。

你也可以利用事件传递数据,Trey的回答也是正确的,他的建议很贴切。您应该使用父组件来完成所有艰苦的工作。但是,如果您仍然希望按照目前的方式继续,我建议您使用事件来传递数据,

  handleIncomingData(e) {
    this.dispatchEvent(new CustomEvent('kick', {detail: {ajaxData: yourAjaxData}}));
  }

此代码段是从聚合物网站本身采用的,请确保您使用事件的详细信息 属性 传递数据。

参考这个link,

https://www.polymer-project.org/2.0/docs/devguide/events