首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义控件自定义方法?

自定义控件自定义方法?
EN

Stack Overflow用户
提问于 2012-04-09 21:59:03
回答 3查看 595关注 0票数 1

我已经很好地利用了自定义控件的自定义属性。有没有定制方法?假设我希望在CC中发生一些事情。对话框扩展的show方法就是一个很好的例子。如果我有一个带有扩展对话框的cc,我希望我的自定义控件有一个Show方法,它将最终用户程序员与扩展页Shoe方法隔离开来。

有没有办法做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-10 06:25:13

在运行时,所有自定义控件元素都将成为UIIncludeComposite类的实例;因此,您可以针对任何给定的控件实例调用许多内置方法,但无法指定自定义方法,而不是自定义属性。

然而,至少有两种方法可以达到你想要的结果:

  1. 将您的自定义控件转换为组件(this NotesIn9 episode描述了此过程的最简单方法)。一旦您将Designer生成的类迁移到不会在每次构建NSF时被覆盖的类,您就可以添加自定义方法,而不必担心下一次构建会再次清除它们。由于自定义控件本质上只是IBM对JSF 2.0“复合组件”概念的实现,因此您也可以从头开始创建一个与现有自定义控件具有相同行为但也支持自定义行为的组件。请注意,这两种方法都不一定要求您创建一个OSGi库...您可以直接在NSF中定义这些组件;如果您希望跨多个NSF重用它们,而不必将各种文件复制到每个NSF中,则只需将它们推送到库中。
  2. 在控件的自定义属性中,包含一个接受API对象的属性。换句话说,您可以创建任何支持您希望定义的自定义方法的对象(比如Java类或SSJS对象),并将该对象传递给控件。然后,您可以通过CC的属性映射获取对象的句柄来调用这些方法。

例如:

代码语言:javascript
复制
<myCC id="myCustomControl" API="#{someObject}" />

假设#{someObject}解析为包含一个show()方法,您可以通过获取已传递给控件的实例的句柄来调用该方法:

代码语言:javascript
复制
var cc = getComponent("myCustomControl");
var ccProperties = cc.getPropertyMap();
var ccAPI = ccProperties.get("API");
ccAPI.show(cc);

在上面的示例中,我将实际的Custom Control传递给show()方法,因为对象本身并不知道它被传递到的Custom Control。因此,例如,如果该方法需要获得其子对象的句柄来切换其呈现的属性,那么它需要一些其他方法来确定其上下文。

票数 4
EN

Stack Overflow用户

发布于 2012-04-10 16:57:42

Tim的传入对象的解决方案就是一个很好的解决方案。

我脑海中突然浮现出一些东西,可以很容易地让一个属性类似于控件上呈现的属性。传入一个值,然后在自定义控件中根据它的值做一些事情。如果为true,则显示对话框,否则隐藏,在运行时在XPage中修改此值并部分刷新控件,逻辑将由此重新运行,控件将显示等。

票数 0
EN

Stack Overflow用户

发布于 2012-04-11 14:53:01

另一种解决方案是在您的自定义控件中包含一个JavaScript库,该库提供函数(您的自定义控件方法),其中您必须传入自定义控件实例的id。

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

https://stackoverflow.com/questions/10074316

复制
相关文章

相似问题

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