我正在开发一个类,我希望将类的属性数据绑定到数据集。 我已经设法让以下简化版本的工作:
<class name="myclass">
<dataset name="attSettings"><settings>
<property name="applyshadow" defaultvalue="false" type="boolean" />
</settings></dataset>
<attribute name="default_applyshadow" type="boolean" value="$once{(this.attSettings.getPointer()).xpathQuery('settings/property[@name="applyshadow"]/@defaultvalue')}" />
</class>
然而,这种语法非常麻烦,感觉不对,所以我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:1)
这不回答您的问题,但解释了为什么您不能在您的情况下使用本地数据集。如果类中有本地数据集,则只能在类的子级中寻址数据集,例如:
<canvas debug="true">
<class name="myclass">
<dataset name="myds">
<root>
<property name="applyshadow" defaultvalue="false" type="boolean" />
</root>
</dataset>
<text datapath="local:classroot.myds:/root/property[@name='applyshadow']/@defaultvalue" />
</class>
<myclass />
</canvas>
<text>
元素可以通过将local:
添加到数据路径值来访问父类的数据集。如果您没有为数据集选择名称,OpenLaszlo将自动使用名称localdata
作为数据集。使用该名称的数据集可以通过省略datapath / xpath值中的数据集名称来解决,例如
<class name="myclass">
<dataset>
<root>
<property name="applyshadow" defaultvalue="false" type="boolean" />
</root>
</dataset>
<text datapath="local:classroot:/root/property[@name='applyshadow']/@defaultvalue" />
</class>
请注意,数据路径没有名称,并且用于<text>
组件的数据路径现在是local:classroot:/root/...
,而local:classroot.localdata:/root/...
也可以。{/ p>
我不理解设计决策,这使得无法在包含该数据集的类的数据路径中使用本地数据集,但可能存在一些技术原因(初始化顺序等)
答案 1 :(得分:0)
我找到了正确的语法来做我想要的事情:
<dataset name="myclass_settings">
<root>
<property name="applyshadow" defaultvalue="false" type="boolean" />
</root>
</dataset>
<class name="myclass" datapath="myclass_settings:/root">
<attribute name="default_applyshadow" type="boolean" value=$path{'property[@name="applyshadow"]/@defaultvalue'}" />
</class>
$ class {}约束用于class属性,以通过相对xpath查询将值链接到数据集。我还必须将数据集移到类之外才能使它工作。