覆盖qx.core.Object#bind

时间:2016-04-26 14:09:08

标签: javascript qooxdoo

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

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

虚线名称用于引入配置层次结构。我还希望以下工作:

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

这里的想法是使用传统的qooxdoo绑定语义;不同的是," foo.bar"不表示房地产链,它只是一个关键名称。

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

1 个答案:

答案 0 :(得分:3)

替换绑定机制不是一项简单的任务,但它是单向的 - 例如,当您可以覆盖bind()以允许从配置绑定时,您将无法绑定从某些属性返回进入配置。显然,这取决于您的应用程序是否有用,但(例如)如果您想构建配置编辑器UI,标准表单绑定将无法正常工作。

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

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

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