1

当我尝试在这样的类中使用这样的默认位置时,$once{property}会出现以下错误。

Exception in thread "main" org.openlaszlo.sc.parser.TokenMgrError: Lexical error at line 25, column 249.  Encountered: "@" (64), after : ""
     [exec]     at org.openlaszlo.sc.parser.ParserTokenManager.getNextToken(ParserTokenManager.java:2565)
     [exec]     at org.openlaszlo.sc.parser.Parser.jj_scan_token(Parser.java:10271)
     [exec]     at org.openlaszlo.sc.parser.Parser.jj_3_5(Parser.java:8325)
     [exec]     at org.openlaszlo.sc.parser.Parser.jj_2_5(Parser.java:7224)
     [exec]     at org.openlaszlo.sc.parser.Parser.CallExpression(Parser.java:1312)
     [exec]     at org.openlaszlo.sc.parser.Parser.PostfixExpression(Parser.java:1521)

我在这个 url 中放置了一个示例代码。该代码在 OL 3.3 中运行良好,但在 4.9 和 5.0 中运行良好。任何关于它为什么不起作用的想法都会有所帮助。

http://forum.openlaszlo.org/showthread.php?p=48740#post48740
4

1 回答 1

1

您的代码中有两个问题。一、defaultplacement属性的双引号语法:

<attribute name="defaultplacement" value="'insideview'"/>

这是一种旧语法,最新版本的 OpenLaszlo 不需要这种语法。另一个问题是 $once{} 约束的使用,它甚至不需要 - 并且导致编译器异常。

<attribute name="defaultplacement" value="$once{test.defaultplacement}"/>   

但是让我用一个简单的代码示例来澄清我的意思:

<canvas>

  <class name="blackbox" extends="view">
    <attribute name="bgcolor" value="black"/>
    <attribute name="defaultplacement" value="blackinner"/>
    <view name="blackinner" bgcolor="green"
          x="10" y="10" width="${parent.width-20}" height="${parent.height-20}">

    </view>
  </class>

  <class name="redbox" extends="view">
    <attribute name="bgcolor" value="red"/>
    <attribute name="defaultplacement" value="content"/>
    <blackbox name="content"
          x="10" y="10" width="${parent.width-20}" height="${parent.height-20}">

    </blackbox>
  </class>


  <redbox x="10" y="10" width="200" height="200">
    <view width="40" height="40" bgcolor="blue" />
  </redbox>

</canvas>

这个示例应用程序定义了一个黑盒类和一个红盒类。黑盒只是一个带有绿色子视图的黑盒,它有一个 10 像素的插图。

redbox 使用 blackbox 类/标签作为子级,插入 20 像素。redbox 的 defaultplacement 是指 blackbox 实例,而 blackbox 的 defaultplacement 是指名为“blackinner”的 blackbox 的绿色子视图。

然后代码创建一个 redbox 的实例,以蓝色视图(40x40 像素)作为内容。正如您在此应用程序的屏幕截图中所见,蓝色视图自动正确放置在黑盒的绿色视图内。

具有默认放置工作的示例应用程序的屏幕截图

当进行讨论的更改时,您的应用程序的原始代码(我已将所有类放入画布文件以进行简化)在 5.0(主干)中编译没有任何问题:

<canvas>

  <class name="myframe" extends="view">
    <attribute name="bgcolor" value="red"/>
    <attribute name="defaultplacement" value="insideview"/>
    <view x="5" y="5" width="${parent.width-10}" name='insideview'
          height="${parent.height-10}" 
          bgcolor="#FFFFCC"/>
  </class>


  <class name="answerMain" extends="view">
    <attribute name="defaultplacement" value="test"/>   
    <myframe name="test" width="220" height="20" />
  </class>

  <answerMain>
    <text> HI </text>
  </answerMain>

</canvas>

在这种情况下,OpenLaszlo 编译器绝对不应该以异常退出,但不幸的是,过去两年中编译器的维护并不好。

于 2012-08-16T14:28:52.823 回答