Ace: 新功能:支持最大长度选项

创建于 2017-08-24  ·  3评论  ·  资料来源: ajaxorg/ace

有时重要的是设置脚本的限制。

最有用的评论

为了确保得到的长度是有限的,并通过修剪末端来允许大粘贴,请尝试以下编辑:

var doc = editor.session.doc
doc.applyAnyDelta = doc.applyAnyDelta || doc.applyDelta
doc.applyDelta = function(delta) {
    let joinedLines = delta.lines.join("\n")

    if (delta.action == "insert" && this.$maxLength
        && this.getValue().length + joinedLines.length > this.$maxLength) {

        let newPasteLength = this.$maxLength - this.getValue().length
        if(newPasteLength > 0) {
            delta.lines = joinedLines.substr(0, newPasteLength).split("\n")
            if(delta.lines.length == 1 && delta.start.row == delta.end.row) {
                delta.end = {
                    row: delta.start.row,
                    column: delta.start.column+newPasteLength
                }
            } else {
                delta.end = {
                    row: delta.start.row+delta.lines.length,
                    column: delta.lines[delta.lines.length-1].length
                }
            }
        } else return false;
    }
    return this.applyAnyDelta(delta);
}
doc.$maxLength = 20

对生产进行更多优化可能会有所帮助,但我希望这对某人有所帮助!

另外,我遇​​到了与@christianbs相同的用例:)

所有3条评论

如果编辑器值超过某个限制,您可以使用以下代码禁用插入

var doc = editor.session.doc
doc.applyAnyDelta = doc.applyAnyDelta || doc.applyDelta
doc.applyDelta = function(delta) {
   if (delta.action == "insert" && this.$maxLength 
       && this.getValue().length > this.$maxLength) {
       return false;
   }
   return this.applyAnyDelta(delta);
}
doc.$maxLength = 20

请问您在什么情况下需要这个,以帮助我们了解这是否需要成为默认选项集或扩展的一部分。

当然!! 因此,在我们的应用程序中,脚本保存在数据库中,并且此列有限制。 我想这应该是很常见的,因为编辑器实际上在 web 应用程序中非常常用。 另一方面,上面的脚本应该可以解决我的问题......谢谢

为了确保得到的长度是有限的,并通过修剪末端来允许大粘贴,请尝试以下编辑:

var doc = editor.session.doc
doc.applyAnyDelta = doc.applyAnyDelta || doc.applyDelta
doc.applyDelta = function(delta) {
    let joinedLines = delta.lines.join("\n")

    if (delta.action == "insert" && this.$maxLength
        && this.getValue().length + joinedLines.length > this.$maxLength) {

        let newPasteLength = this.$maxLength - this.getValue().length
        if(newPasteLength > 0) {
            delta.lines = joinedLines.substr(0, newPasteLength).split("\n")
            if(delta.lines.length == 1 && delta.start.row == delta.end.row) {
                delta.end = {
                    row: delta.start.row,
                    column: delta.start.column+newPasteLength
                }
            } else {
                delta.end = {
                    row: delta.start.row+delta.lines.length,
                    column: delta.lines[delta.lines.length-1].length
                }
            }
        } else return false;
    }
    return this.applyAnyDelta(delta);
}
doc.$maxLength = 20

对生产进行更多优化可能会有所帮助,但我希望这对某人有所帮助!

另外,我遇​​到了与@christianbs相同的用例:)

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

ketysek picture ketysek  ·  3评论

gsf picture gsf  ·  6评论

codeofnode picture codeofnode  ·  3评论

velara3 picture velara3  ·  5评论

akosyakov picture akosyakov  ·  3评论