javascript - 覆盖 qx.core.Object#bind

标签 javascript qooxdoo

在我的应用程序中,我有一个实现用户配置的键值存储(a la Apache Commons Configuration):

var config = new Configuration();
config.set("foo.bar", "baz");
config.get("foo.bar"); // "baz"

点名用于介绍配置层次结构。我还希望以下内容起作用:

config.bind("foo.bar", target, "property.chain");

这里的想法是使用传统的 qooxdoo 绑定(bind)语义;不同的是,“foo.bar”并不表示真正的属性链,它只是一个键名。

我应该如何实现?可以完全覆盖 qx.core.Object#bind 吗?与我的实现?或者我应该按照标准 qx.core.Object#bind 的方式对 Configuration 类的内部进行建模吗? (委托(delegate)给 qx.data.SingleValueBinding )行得通吗?第二种情况可能涉及一些生成的类(类似于 qx.data.marshal.Json#toClass 所做的)来反射(reflect)具有真实属性的键名。坦率地说,这对我来说似乎有点复杂。你怎么看?

最佳答案

替换绑定(bind)机制不是一项微不足道的任务,但它是单向的——例如,虽然您可以重写 bind() 以允许从您的配置中绑定(bind),但您将无法绑定(bind)从一些属性回到配置。显然,这是否有用取决于您的应用程序,但是(例如)如果您想构建一个配置编辑器 UI,标准表单绑定(bind)将根本不起作用。

或者,您可以将您的配置对象构建为一个实际的类,这有几个优点——双向绑定(bind)可以工作,您可以拥有强制数据类型、事件、应用方法的属性,您可以使用反射检查结构等.

另一方面,无需为每个设置创建正式的 API 结构即可创建(并忘记)简单设置通常非常有用。

所以最终你的里程可能会有所不同,因为它取决于你想要存储的数据,并且随着你的应用程序复杂性的增加,你想要存储的数据也可能会变得更复杂并且更难存储在简单的字符串中/值对。

关于javascript - 覆盖 qx.core.Object#bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36867416/

相关文章:

qooxdoo - 如何以编程方式获取 qooxdoo 子类列表

javascript - 使用 Selenium 步骤定义从 CucumberJS 执行回调

javascript - 如何让我的 Div2 直接位于我的 Div1 下方

javascript - 根据另一个下拉菜单的选择重新填充下拉菜单

javascript - 图像未出现在 Canvas 上

javascript - 为什么这个持有 SVG 的 `blob:` URL 会污染 Chrome 中的 Canvas ?

javascript - qooxdoo桌面(浏览器环境)加载模块

javascript - 有谁知道动态加载 qooxdoo 模块的方法吗?

javascript - 使用虚拟列表在 qooxdoo 中无限滚动

selection - qooxdoo - 自定义列表项小部件选择