当我尝试在类似$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)
我已在此网址中放置了示例代码。代码在OL 3.3中工作正常,但在4.9和5.0中没有。 任何关于它为什么不起作用的想法都会有所帮助。
http://forum.openlaszlo.org/showthread.php?p=48740#post48740
答案 0 :(得分: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>
此示例应用程序定义了一个类blackbox和一个类redbox。黑盒子只是一个带有绿色子视图的黑盒子,其插图为10像素。
redbox使用blackbox类/标记作为子项,插入为20像素。 redbox的默认位置是指blackbox实例,blackbox的默认位置是指blackbox的绿色子视图,名称为“blackinner”。
然后代码创建一个redbox实例,其中包含蓝色视图(40x40像素)作为内容。正如您在应用程序的此屏幕截图中看到的那样,蓝色视图会自动正确放置在黑盒的绿色视图中。
当讨论的更改发生时,应用程序的原始代码(我已将所有类放入canvas文件中以简化)在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编译器绝对不应该以异常退出,但不幸的是编译器在过去两年中没有得到很好的维护。