如果这有点模糊,我们深表歉意。
我有自己的基于 FRP 的库来构建我的应用程序模型。它有一个 组件
的概念,它有 state
通过 Stream
改变。
这封装了 UI 减去实际 View 的行为。我开始将其与 Polymer 1.0 集成,并希望得到一些指导作为最佳方法。
有些事情很容易(比如将对模型中字段的更改绑定(bind)到 notifyPath
)。
对于更新,我正在考虑使用带有 Observe
注释的单一方法,例如
@Observe('*')
void myHandler(Map changeRecord) => ... delegate to my adapters
像这样监听所有 (*) 事件可能效率低下吗?是否有一种较低级别的方法来注册更具体的路径,从而避免需要 Observe
注释?
在这种情况下,使用 PolymerRegister
注释是注册组件的最佳方式吗?是否有较低级别的 API 来代替它?
最佳答案
Is it likely to be inefficient to listen to all (*) events like this?
不幸的是,全局 * 事件实际上不受支持,路径必须以属性名称开头。您可以使用 properties
getter 来为所有属性设置手动监听器。
Is there a lower level way to register more specific paths that avoids the need for the Observe annotation.
有 listen(Node element, String eventName, String methodName)
方法。您可以将 this
作为节点传递并监听 {{property}}-changed
事件。您将需要确保所有属性都具有 notify: true
以便它们触发事件。这也会降低效率,因为它使用的是实际事件而不是观察者使用的魔术钩子(Hook)。
可能还有其他一些 hack 可以动态添加常规观察者,但我并不知道它们:)。
Is using the PolymerRegister annotation the best way to register the components in this case? Is there lower level API to do it instead?
这是目前唯一的方法,但如果您想控制注册发生的时间,您只需创建一个 const PolymerRegister(...)
对象并调用 initialize
只要你的心想要就可以了。如果您愿意,请为真正的命令式 API 提交功能请求。
关于dart - 将另一个框架与 polymer dart 1.0 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32987414/