【问题标题】:Is there a way to use a javascript object as a custom control property?有没有办法将 javascript 对象用作自定义控件属性?
【发布时间】:2014-12-28 16:16:29
【问题描述】:

我目前正在构建一个自定义控件以用作应用程序的视图导航器(经典 OneUI 样式)。首先:这是一个基于 8.5.3 的项目,不幸的是没有办法使用 Extlib 的东西或其他扩展/插件。所以我们必须自己构建所有棘手的东西,只使用 8.5.3 中“开箱即用”的东西。

我想使用包含<xp:link> 控件的重复控件来构建我的导航器。数据源可以是一个 javascript 对象数组,其中每个对象看起来像这样:

var navEntry = {"entryLabel" : "label-of-link", 
      "entryTarget" : "target-url-of-link",
      "entryStyle" : "style-to-emphasize-selected-link"}

然后每个数组元素将描述一个导航器条目。 由于导航器将在所有可能的“DominoView”Xpages 中使用,因此在 Xpage 级别构建 JS 对象数组然后将该信息传递给自定义控件是有意义的。

我知道有多种方法可以做到这一点,其中一种可能是“自定义控件属性”。如果有办法传递我的 JS 对象数组。

(希望我能弄清楚我在这里想要做什么......)

【问题讨论】:

    标签: xpages


    【解决方案1】:

    那个对象在我看来真的像一个 HashMap。如果您使用我认为的 java.util.HashMap 类型,您应该能够通过自定义属性将其传递给自定义控件。我确定你需要输入它。我已经使用 java.lang.Object 传递了自定义对象。

    【讨论】:

    • 正如 David 所写,创建一个 Java 对象并将该对象传递给自定义控件。我永远不会创建一个 Javascript 对象并在我的 XPage 应用程序中发送它。因为突然你会得到一个序列化错误。
    • 感谢你们两位; @David:你说得对,它真的是一个 HashMap。我会尽快尝试的
    【解决方案2】:

    自定义控件将在页面加载事件期间加载,并且通常此时属性必须可用。如果它们是在渲染响应阶段加载的,那就太晚了。所以你的 SSJS 对象需要在页面加载时计算。

    要使用重复控件的内容,您需要设置 repeatControls=true,否则重复只会在渲染响应期间构建。在那之前,它只是一组没有数据的控件。但是,我很确定 repeatControls="true" 意味着您只能获得您定义的行数。您无法通过寻呼机更改它。

    【讨论】:

    • 分页不在此处的待办事项列表中,因此这应该不是问题。无论如何,感谢您指出这一点。
    【解决方案3】:

    您可以手动定义自定义属性的类型。对于标准 SSJS 对象,您使用“com.ibm.jscript.std.ObjectObject”,对于 SSJS 数组,您使用“com.ibm.jscript.std.ArrayObject”等等。作为自定义属性的编辑器,我设置了字符串编辑器(“字符串值”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-14
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多