首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Open Laszlo 5.0.x中的默认放置不能正常工作

Open Laszlo 5.0.x中的默认放置不能正常工作
EN

Stack Overflow用户
提问于 2012-08-16 21:19:32
回答 1查看 84关注 0票数 1

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

代码语言:javascript
复制
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中不能正常工作。任何关于它为什么不工作的想法都会有帮助。

代码语言:javascript
复制
http://forum.openlaszlo.org/showthread.php?p=48740#post48740
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-16 22:28:53

您的代码中有两个问题。首先,defaultplacement属性的doublequote语法:

代码语言:javascript
复制
<attribute name="defaultplacement" value="'insideview'"/>

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

代码语言:javascript
复制
<attribute name="defaultplacement" value="$once{test.defaultplacement}"/>   

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

代码语言:javascript
复制
<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使用黑盒类/标记作为子类,嵌入的像素为20像素。redbox的默认位置指的是黑盒实例,黑盒的默认位置指的是名为blackinner的黑盒的绿色子视图。

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

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

代码语言:javascript
复制
<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编译器绝对不应该带着异常退出,但不幸的是,在过去的两年中,编译器没有得到很好的维护。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11988066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档