精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网站开发>ajax教程>正文

ajax开发工具bindows使用指南:标记


来源: 时间:07-01-01 点击: 点击这里收藏本文

这篇文档描述了怎样使用 XML 定义 Bindows 应用程序的对象层次.。

范例

让我们从一个最小化的只用 XML 定义的 Bindows 应用程序简单例子开始。

<?xml version="1.0"?>
<Application>
   <Window>
      <Button>Hello World</Button>
   </Window>
</Application>

在这个例子中我们从应用程序描述文件(ADF)开始。作为一个有经验的用户可能会注意到,这篇稳定没有包含任何脚本,也没有 main 方法。它不再需要静态方法调用 main ,但是使用 main 的情况仍然是有效的。

规则

那么系统是怎么知道如何把 XML 反序列化为 Bindows 对象呢?下面的规则描述了这个过程。

类名

元素的标记名被映射给要创建的对象的类名。在上面的例子中,我们创建了一个叫做 Button 的标记,通过这个标记我们找到一个叫做 BiButton 的类。如果没有叫做 BiButton 的类,系统就试图用 Button 来代替。

属性

让我们修改上面的例子使之使用几个属性。

<?xml version="1.0"?>
<Application>
   <Window>
      <Button text="Hello World"
         left="10" top="10" width="75"/>
   </Window>
</Application>

元素的属性被映射到组件的属性上。对于在元素上找到的每个属性,反序列化对象 (BiXmlResourceParser)调用其相应对象(在本例中为 button 对象)的 setAttribute 方法。setAttribute 做必要的来自于字符串值的类型转换,然后调用setProperty 方法,此方法会依次为该属性调用设置器。基本上,此过程可以被描述如下:

button.setAttribute( "left", "10" );
button.setProperty( "left", 10 );
button.setLeft( 10 );

除了上面发生的过程以外,每个类还拥有指定的更复杂的过程来完成反序列化属性。

复杂属性

有时,属性并不能真正地被表示为字符串。因此,在该情况下,你会发现复杂属性是非常有用的。复杂属性允许你设置任何类型对象的属性。

<?xml version="1.0"?>
<Application>
   <Window>
      <Button text="Hello World">
         <Button.border>
            <Border width="2" style="solid" color="red"/>
         </Button.border>
     </Button>
   </Window>
</Application>

在上面的例子中,有一个名为 Button.border 的元素,代表 Button 元素有一个名为 Border 的复杂属性,其对应的对象为 BiBorder,BiBorder 对象的属性是通过 Border 元素的子结点 width,style,color 来声明的。

那么规则可以叙述如下,复杂属性使用子元素来声明,让子元素来声明的相应对象。子元素的标记名称必须为对象的类名称,并且复杂属性名被跟在点后面。对应对象的属性值是通过复杂属性元素的子结点来进行声明的。

子元素

让我们再次修改上面的例子,添加一个包含按钮和标签的组件。

<?xml version="1.0"?>
<Application>
   <Window>
      <Component width="100" height="100" backColor="navy">
         <Button text="Hello" left="10" top="10" width="75"/>
         <Label text="World" left="10" top="40"/>
      </Component>
   </Window>
</Application>

查看上面的代码,有人可能期待此按钮和标签会被做为子组件添加到上级组件中,事实确实如此。但是,这是如何做到的呢?这是通过 BiObject 对象的 addXmlNode 方法实现的。此方法获取 XML 子结点 (和 BiXmlResourceParser), 并且做必需的转换,然后按需要将其添加。BiComponent 对象覆盖了此方法,于是当它找到一个被反序列化成另外的 BiComponent 对象的子结点时,它就添加那个组件。

对于覆盖了 addXmlNode 方法的对象,当 XML 结点被添加时,不同的类做不同的事情。例如,BiLabel 对象能获取文本结点和 XHTML 元素,并且将此映射到它的 html 属性。

<?xml version="1.0"?>
<Application xmlns:xhtml="http://www.w3.org/1999/xhtml">
   <Window>
      <Label width="100" height="100">
        Hello <xhtml:strong>XHTML</xhtml:strong> World
      </Label>
   </Window>
</Application>

为了能够使用 XHTML,你需要确认此 XHTML 元素使用了 XHTML 命名空间。如果你忘记了命名空间声明,那么将会出错。因为它极有可能找不到匹配元素的对象。

事件

BiEventTarget 覆盖了 setAttribute 方法,所以任何以 “on”开头的属性都会被映射到相应的事件处理器。映射规则是事件类型对应不带 on 前缀的属性名。在事件处理器内部,event 指向此 BiEvent 事件对象,而 this 则指向正在处理反序列化过程的 BiXmlResourceParser 对象。因此,下面的代码就能按期望的方式进行工作:

<?xml version="1.0"?>
<Application>
   <Window>
      <Button onaction="event.getCurrentTarget().setText('Changed')">
         Hello World
      </Button>
   </Window>
</Application>

id 属性

在 XML 文档的上下文中,id 属性经常被用来寻找某个对象。如果某个对象拥有 id,那么你就可以通过 getComponentById 方法来找到它。

在你的代码中:

var parser = new BiXmlResourceParser;
parser.setAsync( false );
parser.load( "ui.xml" );
var label = parser.getComponentById( "my-label" );

...或者在标记方式中, 你直接这样写。

<?xml version="1.0"?>
<Application>
   <Window>
      <Button text="Change"
         onaction="this.getComponentById('my-label').setText('Changed')"/>
      <Label id="my-label" top="35" text="Label"/>
   </Window>
</Application>

注意:上面的 this 指向的不是按钮,而是 XML 资源分析器。

总结

  • 标记名称被做为类名称使用
  • 元素的属性被映射到组件的属性
  • 以 on 开头的元素属性被映射到相应的事件处理器
  • 子结点通过 addXmlNode 方法被添加到其父结点中

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.