1

我正在开发一个类,我希望将类的属性数据绑定到数据集。我已经设法在我的课程的以下简化版本中获得以下内容:

  <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>

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

4

2 回答 2

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>组件的数据路径是 now local:classroot:/root/...,whilelocal:classroot.localdata:/root/...也可以。

我不理解设计决定,这使得无法允许在包含该数据集的类的数据路径中使用本地数据集,但可能有一些技术原因(初始化顺序等)。

于 2013-01-23T12:27:36.130 回答
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>

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

于 2013-01-23T00:02:34.577 回答