在OpenLaszlo语言中数据绑定类属性的正确语法是什么?

时间:2013-01-22 22:10:01

标签: openlaszlo lzx

我正在开发一个类,我希望将类的属性数据绑定到数据集。 我已经设法让以下简化版本的工作:

  <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=&quot;applyshadow&quot;]/@defaultvalue')}" />

  </class>

然而,这种语法非常麻烦,感觉不对,所以我想知道是否有更好的方法来做到这一点。

2 个答案:

答案 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=&quot;applyshadow&quot;]/@defaultvalue'}" />
 </class>

$ class {}约束用于class属性,以通过相对xpath查询将值链接到数据集。我还必须将数据集移到类之外才能使它工作。