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 評価