0

我对 CP 文档的深入研究越多,我就越意识到我的假设有多少是错误的。在寻求有效理解系统的那一刻,我正在寻找一个仅包含自定义对象(非事件/非答案/非联系)的表单,然后尝试在客户门户上使用它。

为了简单起见,我想要做的只是有一个 2 字段表单(两个文本框)和一个提交按钮作为前端。以下是我正在尝试做的事情:

  • 以 的形式使用输入文本框,<rn:widget .... />以便我可以使用 等属性requiredvalidate_on_blur我不确定这些属性是否也可以用于自定义对象,但我们稍后会讨论。
  • 使用已定义的用于标准对象的表单验证方法(如果可能的话),这样我就不必重新发明轮子了。
  • 成功验证后,将表单数据发布到我可以保存该数据的自定义控制器。

我很快意识到我根本无法input/FormInput为自定义对象使用标准(生成文本框)小部件。我还发现我也不能使用标准input/TextInput小部件。经过一番研发,我终于设法通过从头开始创建一个小部件并在其视图中添加适当的 HTML 来找到解决方案。

到目前为止,一切都很好。我的第一步得到了照顾。我能够使用

<rn:widget path="/custom/nl/custom_input" name="Packagename$Objectname.c$Fieldname" required = "true" />

在表单的视图页面中。

下一步,表单验证,是让我无限困惑的地方。我无法理解文档中给出的代码,因此决定在这里讨论它。

我遇到了这个不幸的是没有太大帮助。我还遇到了另一个线程(似乎找不到 URL),其中 OP 使用了一个自定义小部件,该小部件正在扩展input/TextInput小部件,并想知道如何将验证应用于该文本框。给出的答案是覆盖onValidate函数input/TextInput并在错误时返回 false 或在成功时返回事件对象。

那么我是否正确地假设也许我可以采用类似的方法?由于我使用的是新的小部件,是否有类似的方法可以覆盖并返回 true 或 false?如果是,该函数的名称是什么?非常感谢任何帮助。

4

2 回答 2

1

您使用的是 CP2 还是 CP3 以及 RightNow 的哪个版本?我会假设这里是 CP2。

你的问题几乎是两部分:1)我可以使用哪个小部件,2)我如何扩展验证?

既然听起来您只想使用标准小部件属性requiredvalidate_on_blur那么我认为您的第一种方法更好。您应该能够使用开箱即用的功能实现您所描述的内容。

使用标准小部件

尝试使用点符号再次使用标准小部件来访问该字段;类似于 ROQL 中的方法:

<rn:widget path="input/FormInput" name="Packagename.Objectname.Fieldname" required = "true" />

自定义对象没有自定义字段,因为对象本身是自定义的。c$因此,访问自定义对象上的字段没有前缀。该符号仅适用于标准对象上的自定义字段。

另外,值得注意的是,FormInput小部件只是其他输入小部件的包装器,包括TextInput.

创建小部件验证

如果您想使用自定义小部件,那么您需要覆盖logic.js文件中的适当方法,如您所提到的。根据您创建自定义小部件的方式,onValidate 或任何您的验证方法,实际上可能还不是该文件中的方法;你必须创建它。在这种情况下,您需要为文本字段设置事件侦听器,然后对事件执行操作。如果您想使用模糊,它将类似于以下内容(这基本上是标准输入小部件所做的)

RightNow.Widget.MyWidget = function(data, instanceID) {
    //Setup widget data
    this._inputField = document.getElementById("rn_" + this.instanceID + "_" + this.data.js.name);
    YAHOO.util.Event.addListener(this._inputField, "blur", this._blurValidate, null, this);
}

RightNow.Widget.TextInput.prototype = {
     _blurValidate: function()
     {
         //validate your field data
     }
}

CP3 方法有点不同,特别是因为有强大的自定义小部件继承。因此,如果您使用的是 CP3 并且仍想使用自定义小部件路线,请回来查看。

此外,所有标准小部件代码都应通过 WebDAV 中的 src 文件夹公开给您。如果您可以通过您的个人资料访问 WebDAV(因为您正在开发 CP),那么您可以查看标准小部件的工作原理并将相同的原则应用于您的代码。

于 2014-05-07T13:53:17.687 回答
0

我通过一系列试错法弄明白了。我所做的是Rightnow.Field在其logic.js文件中扩展我的自定义输入。

Custom.Widgets.nl.custom_input = RightNow.Field.extend({
    overrides: {            
        constructor: function() {               
            this.parent();

            /* Call a custom function on form submit */
            this.parentForm().on("submit", this.onValidate, this);
        }
    },

以下函数取自SiteInfologic.js文件(CP 文档中提供的自定义对象示例代码)并包含在我的输入文件中以完成验证过程。logic.js

  • 验证
  • _displayError
  • _toggleErrorIndicator

这使整个过程自动化,并进行了验证。好吧,至少对于文本框...

于 2014-05-08T04:54:17.113 回答