如何在将数据发送到服务器之前从x可编辑字段中删除特殊字符?

时间:2014-12-15 21:33:16

标签: javascript forms x-editable

我想从xeditable文本输入中删除一些特殊字符,并在模型(剥离)文本字段发送到服务器之前将已清理的字符串写入本地模型。

根据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方法中,我将可能更新的数据发送到服务器。

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

  1. 不应该删除字符。你为什么这样?那个unicode号码对你做了什么剥离呢?无论你遇到什么问题,都可能有更深层次的根源。
  2. 如果您仍想删除字符(非常讨厌它们),请删除服务器上不需要的字符,而不是客户端上的字符。
  3. 始终怀疑地对待客户。永远不要相信客户送你的东西。做任何需要在服务器上进行的验证/清洁工作,而不是在客户端上。