【问题标题】:How to remove special characters from an x-editable field before sending data to the server?如何在将数据发送到服务器之前从 x 可编辑字段中删除特殊字符?
【发布时间】:2014-12-15 21:33:15
【问题描述】:

我想在模型的(剥离的)文本字段发送到服务器之前,从可编辑的文本输入中剥离一些特殊字符,并将净化后的字符串写入本地模型。

根据the docs

When you submit editable form it performs following steps:

- call child's onbeforesave
- call form's onbeforesave
- write data to local model (e.g. $scope.user)
- call form's onaftersave
- call child's onaftersave

因此,对于我的可编辑文本输入,我有一个去除特殊字符并更新本地模型上的值的方法。我已经验证了这行得通;运行 onbeforesave 后,模型具有正确的剥离值。我也知道 onbeforesave 的返回结果是这样的:

- string: submit will be cancelled, form will stay opened, string will be shown as error message
- not string: submit will be continued

我在 onbeforesave 函数中返回 undefined。

然后,在表单的 onaftersave 方法中,我将大概更新的数据发送到服务器。

问题是:child onbeforesave 内部的更新丢失了。本地模型和服务器都没有更新的值。

当我将清理方法移动到孩子的 onaftersave 时,本地模型已成功更新,但正如您所料,服务器没有获得更新的信息,因为表单的 onaftersave 是在孩子的 onaftersave 之前调用的。

如果我不得不猜测,我会说问题在于,即使我正在更新 onbeforesave 中的模型,该值也被 $data 覆盖(即输入文本中最初未经处理的数据) ,在我的 onbeforesave 函数运行之后。

因此,看来我唯一的选择是进一步修改表单的 onaftersave,以便在将经过净化的更新数据发送到服务器之前从我的文本字段中删除特殊字符。

准确吗?除了使表单的 onaftersave 函数膨胀之外,还有更优雅的方法吗?

【问题讨论】:

    标签: javascript forms x-editable


    【解决方案1】:

    我不确定这是否是最优雅的方式,但我的工作解决方案是将参数“this”传递给我的 onbeforesave 函数,其中“this”是我的一个子文本输入的范围,其中包括$data 属性。通过修改 onbeforesave 中的 $data 属性,净化后的值会成功传递到本地模型,然后传递到服务器。

    【讨论】:

      【解决方案2】:

      您的方法很可能是错误的。

      1. 不应该删除字符。你为什么要?那个 unicode 号码对你做了什么来去除它?无论您面临什么问题,都可能有更深层次的根源。
      2. 如果您仍然想删除字符(非常讨厌它们),请在服务器上删除不需要的字符,而不是在客户端上。

      始终以怀疑的态度对待客户。永远不要相信客户发给你的东西。在服务器上执行您需要执行的任何验证/清理工作,而不是在客户端上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-14
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多