在我的应用程序中,我有一个实现用户配置的键值存储(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/