【问题标题】:Server side Javascript library for XPages (jQuery, Underscore, Dojo)用于 XPage 的服务器端 Javascript 库(jQuery、Underscore、Dojo)
【发布时间】:2014-01-10 00:30:17
【问题描述】:

在 XPages 中,我们在服务器端编写 Javascript。我们使用“相同”的客户端语言。然而在客户端,我们可以使用很多很酷的库,比如 jQuery、Dojo 和 Underscore。

我使用过服务器端自定义函数,例如 each 方法:

Object.prototype.each = function (callback) {
    for (var x in this) {
        if (this.hasOwnProperty(x)) {
            callback.call(this, this[x]);
        }
    }
}

但是这些客户端库已经提供了这样的帮助程序以及更多。如果我尝试在服务器端 XPage 中使用这些库,它们会因以下几个原因而失败:

  • Dom 操作
  • 全局变量
  • 窗口对象
  • SSJS XPage 奇怪错误:在“函数 [JavaScript 对象]”类型的对象上调用方法“call(Object)”时出错

有人有这样的服务器端库吗?也许前端 Node.js 开发人员已经解决了这个问题。

任何人都使用以下方法:

  • 每个
  • 地图
  • 减少
  • reduceRight
  • 找到
  • 过滤器
  • 在哪里
  • 在哪里找
  • 拒绝
  • 每一个
  • 一些
  • 包含
  • 调用
  • 采摘
  • 最大
  • 分钟
  • 排序依据
  • groupBy
  • indexBy
  • countBy
  • 随机播放
  • 样本
  • toArray
  • 尺寸
  • 首先
  • 初始
  • 最后
  • 休息
  • 紧凑
  • 展平
  • 没有
  • 联合
  • 十字路口
  • 区别
  • 独特的
  • 压缩包
  • 对象
  • indexOf
  • lastIndexOf
  • 排序索引
  • 范围
  • 绑定
  • 全部绑定
  • 部分
  • 备忘录
  • 延迟
  • 推迟
  • 油门
  • 去抖动
  • 一次
  • 之后
  • 换行
  • 撰写

这些是一些下划线功能。我在服务器端 js 中找到了关于 Underscore 的 link,但我因提到的 SSJS XPage 奇怪错误而失败:Error calling method 'call(Object)' on an object of type 'function [JavaScript Object]'

【问题讨论】:

  • Mootools 也很酷:David Walsh Mootools in Node.js。但恐怕在 XPages 中会有所不同。
  • JavaScript 库往往有两个目的:修复浏览器的缺陷和差异;并通过您提到的小部件和便利功能简化复杂行为的实现。因此,前半部分在服务器端是无用的。在 XPage 中,小部件通常通过组件提供,以最大限度地减少对客户端 JavaScript 的需求。如果您要编写复杂的行为代码,则应使用 Java 编写——为了运行时性能和长期可维护性。
  • 有趣。您关于 Java 性能更好的观点非常好。我仍然认为拥有一个 ssjs 库会很有用,因为 js 中的许多功能比 Java 更简单,而且很多时候几毫秒的性能不是问题。

标签: jquery node.js dojo underscore.js xpages


【解决方案1】:

SSJS 可以使用 Java 对象,从而打开了服务器端库的广阔天地。有关示例,请参阅SSJS to call a method in java class (in java library)。

Google 的 Guava https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained 就是一个这样的库。

【讨论】:

  • 我想要一个 js 库,但 Google 的 Guava 看起来很有趣。你知道任何关于如何在 Lotus/Domino/XPages 中使用 Google 的 Guava 的文档吗?
  • 您可以参考下面的演示文稿dl.dropboxusercontent.com/u/29940060/AdminDev2012/…,尽管还有更多关于同一主题的内容。简而言之,您只需下载 Google 提供的 .jar 文件并将其添加到您的 XPages 项目中。在之前的 Domino Designer 9 和 Domino 9 中,您可以将其添加到 WebContent/WEB-INF/lib 文件夹(演示文稿中的幻灯片 16 显示了一个示例),而在 Domino Designer 9 中,您可以使用新的 Jar 设计元素。我的答案中的第一个链接有一个关于如何使用外部 java 类的示例。
【解决方案2】:

5 个月后我的回答:这是我现在正在使用的 SSJS 库:polyfill.js

它为旧的 Domino 8.5.3 的 JavaScript 填充了以下 JavaScript 方法:(我不知道 IBM Notes 9 的 javascript XSP 版本)

  • Array.isArray
  • Array.prototype.indexOf
  • Array.prototype.lastIndexOf
  • Array.prototype.forEach
  • Array.prototype.some
  • Array.prototype.every
  • Array.prototype.map
  • Array.prototype.reduce
  • Array.prototype.reduceRight
  • Array.prototype.filter
  • Function.prototype.bind
  • String.prototype.trim
  • Object.keys

MDN(Mozilla 开发者网络)https://developer.mozilla.org 的 JavaScript polyfill 集合。 MDN (https://developer.mozilla.org/en-US/docs/Web/Guide/Terminology) 中的 Polyfill 定义“polyfill 是一段代码,它实现了浏览器本身不支持的通用 API”。该文件可在 XPages SSJS(服务器端 JavaScript)中使用,以填补 Domino 8.5.3 JavaScript 中的漏洞。该文件也可以在客户端使用,以便为旧浏览器填充 js 方法:IE9、IE8、IE7。如果您在客户端使用此文件,请从第 400 行删除代码。我在 SSJS XPages 中使用 $.each 函数的方式与 jQuery.each() http://api.jquery.com/jquery.each/ 非常相似。即使使用 java.util.Vector 之类的 Java 对象,我也将它用作迭代器。

编辑 1:警告! 现在 (2014/11/09) XPages SSJS 中的 prototype 存在一个巨大的错误(至少在 Domino 8.5.3 和9):How to clean SSJS in Domino server after someone used javascript prototype in a nsf?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2011-04-25
    • 2012-11-28
    • 2011-12-28
    • 1970-01-01
    • 2011-08-21
    • 2019-01-20
    相关资源
    最近更新 更多