绑定到 Polymer 中的全局变量

Binding to global variables in Polymer

我对 Polymer 还很陌生,只是研究了数据绑定的工作原理。我正在移植一个现有的 Dojo 应用程序,其中会有:

1) 每个 URL

一个存储(保存数据)

2) 更新商店元素时来自服务器的消息

因此,如果用户在应用程序的任何地方向商店添加了一项(保存数据),则依赖于商店中数据的动态创建的 select 框将自动拥有一个额外的项目

我正在尝试在 Polymer 中复制类似的东西。

用例:想象这样一个 URL:/app/categories。通过使用 HTTP GET 查询它,您最终会得到所有可用类别的 JSON。当应用程序 运行 时,服务器可能会通知 /app/categories 中的新元素。因此,应用程序中的所有 select 都会自动拥有额外的项目。

在 Polymer 中,我学习了如何将当前元素中的属性绑定到包含的元素属性。我了解如何在触发正确的事件等情况下发生这种情况。因此,我们的想法是创建一个 select,其中项目由 dom-repeat 生成,这将绑定到...不知何故全局变量 (?).

但是...是否可以将包含元素的 属性 绑定到 "global" 变量,而不是包含元素的 属性?

或者,更广泛地说,是否有一种模式(或者甚至是一种既定模式)来确保当全局变量发生变化时(由于彗星消息或其他原因),绑定到它的一堆元素将收到通知并因此更改(在本例中,"select" 使用 dom-repeat 显示项目!)

这是一个 JSBin that shows how to create a menu via iron-ajax 在这一点上,JSBin 缺少的是关于数据更改的服务器推送的模拟,以及让所有菜单同时更新的方法。

恕我直言,最理智和可维护的模式是一种单向数据流方法(类似于 Flux or Redux(有点简单)。

有一个全局状态对象作为图形结构存在,数据沿着组件树向下流动(从根组件开始)。
每个组件都有明确定义的输入属性并从父组件接收数据(使用数据绑定)并将部分数据传递给其子组件。当一个组件改变状态时,它会触发一个事件,该事件从组件树向上冒泡到您的根组件,然后可以更新您的全局状态对象(它再次流向您的组件树),与后端通信等。

我还可以从 Polymer 2015 峰会上推荐这个 video,它解释了类似的方法(中介模式)。