2014-04-29 2 views
0

AngularJS (UI-Ace 사용)로 ACE 편집기를 사용해 보겠습니다. 나는 질문이있다. (예를 들어) 나는 미리 정의 된 문자를 제외한 모든 문자를 입력 할 수 없음 사용자에게사용자에게 알파벳 입력/삭제 제한

  1. 를 제한 할 수 있습니다
  2. 는 미리 정의 된 문자 또는 공간을 제외한 모든 문자를 삭제하지

UI 에이스 다음과 같이 각도에 ACE 편집기의 OnChange 이벤트를 노출 :

우리는 단지 지정된 문자 목록/A 일치하지 않는 입력 된 문자를 확인 PHP에서
$scope.aceChanged = function(e) { 
// 
}; 

rray/expression/ascii하지만 어떻게 문자를 변경/입력/삭제할 수 있습니까?

안내하십시오.

편집 : 나는 사용자의 ANS에 따라 노력하고 있어요 :하지만 정의되지 않은 편집기 정의되지 않은 변수 나 선 같은 오류를 얻고있다

$scope.aceLoaded = function(_editor) { 
    // Options 
    //_editor.setReadOnly(true); 
    //editor.setOption("showPrintMargin", false)   
    _editor.setOption("showPrintMargin", false); 
    //_editor.setShowInvisibles(true); 
    var _session = _editor.getSession(); 

    //_session.setUseSoftTabs(false); 

    //editor.on("change", onchange) 
    _editor.commands.on("afterExec", afterExec); 

    }; 

    var revertScheduled = false; 

    $scope.aceChanged = function(e) { 
    if($scope.startt ==0){ $scope.startt = new Date().getTime()}; 
    if (!revertScheduled && _editor.curOp) { 
     var text = e.data.lines 
      ? e.data.lines.join("\n") 
      : e.data.text; 

     var shouldRevert = false; 
     var isInsertion = e.data.action[0] == "i"; 
     if (isInsertion && !/^[;]+$/.test(text)) { 
      shouldRevert = true; 
     } else if (!isInsertion && !/^[; ]+$/.test(text)) { 
      shouldRevert = true; 
     } 

     if (shouldRevert) { 
      editor.session.mergeUndoDeltas = false 
      editor.session.markUndoGroup() 
      revertScheduled = true 
      console.log(e.data.text, editor.curOp) 
     } 
    } 
     // 
    $http({ 
     url: global.apiurl+"splitrec",//"http://medline.dev/api/splitrec", 
     method: "POST", 
     data: {'record': $scope.record.name} 
    }).success(function (data, status, headers, config) { 
      // assign $scope.persons here as promise is resolved here 
      //$log.log(data); 
     $scope.res = data; 
     $scope.prova(); 

     }).error(function (data, status, headers, config) { 
      $scope.status = status; 
      $log.log(status); 
     }); 
    }; 


var onchange = function(e) { 

} 

var afterExec = function() { 
    if (revertScheduled) { 
     editor.undo(); 
     revertScheduled = false 
    } 
} 

전자 내 로그 출력 :

[Object, y] 
0: Object 
    data: Object 
    action: "insertText" 
    range: i 
    text: "r" 
    __proto__: Object 
    __proto__: Object 
1: y 
    $blockScrolling: 0 
    $enableMultiselect: true 
    $highlightPending: false 
    $historyTracker: function() { [native code] } 
    $isFocused: false 
    $mouseHandler: l 
    $multiselectOnSessionChange: function() { [native code] } 
    $onAddRange: function() { [native code] } 
    $onChangeAnnotation: function() { [native code] } 
    $onChangeBackMarker: function() { [native code] } 
    $onChangeBreakpoint: function() { [native code] } 
    $onChangeFold: function() { [native code] } 
    $onChangeFrontMarker: function() { [native code] } 
    $onChangeMode: function() { [native code] } 
    $onChangeTabSize: function() { [native code] } 
    $onChangeWrapLimit: function() { [native code] } 
    $onChangeWrapMode: function() { [native code] } 
    $onCursorChange: function() { [native code] } 
    $onDocumentChange: function() { [native code] } 
    $onMultiSelect: function() { [native code] } 
    $onRemoveRange: function() { [native code] } 
    $onScrollLeftChange: function() { [native code] } 
    $onScrollTopChange: function() { [native code] } 
    $onSelectionChange: function() { [native code] } 
    $onSingleSelect: function() { [native code] } 
    $onTokenizerUpdate: function() { [native code] } 
    $opResetTimer: function (e){n==null&&(n=setTimeout(r,e||t))} 
    $search: o 
    _$emitInputEvent: function (e){n==null&&(n=setTimeout(r,e||t))} 
    _defaultHandlers: Object 
    _eventRegistry: Object 
    commands: o 
    container: div.ng-valid.ace_editor.ace-chrome.ng-dirty 
    curOp: null 
    env: Object 
    keyBinding: s 
    lastFileJumpPos: null 
    mergeNextCommand: true 
    multiSelect: u 
    prevOp: Object 
    previousCommand: null 
    renderer: g 
    selection: u 
    selections: Array[5] 
    sequenceStartTime: 1399493671829 
    session: p 
    textInput: f 
(curOP가 null) 당신이 진짜 에이스 인스턴스에 대한 액세스를 가져올 수 있는지 여부

답변

1

을 안내하십시오, 당신은 다음과 같은 방법을 사용할 수 있습니다

var revertScheduled = false 
var onchange = function(e) { 
    if (!revertScheduled && editor.curOp) { 
     var text = e.data.lines 
      ? e.data.lines.join("\n") 
      : e.data.text; 

     var shouldRevert = false; 
     var isInsertion = e.data.action[0] == "i"; 
     if (isInsertion && !/^[;]+$/.test(text)) { 
      shouldRevert = true; 
     } else if (!isInsertion && !/^[; ]+$/.test(text)) { 
      shouldRevert = true; 
     } 

     if (shouldRevert) { 
      editor.session.mergeUndoDeltas = false 
      editor.session.markUndoGroup() 
      revertScheduled = true 
      console.log(e.data.text, editor.curOp) 
     } 
    } 
} 

var afterExec = function() { 
    if (revertScheduled) { 
     editor.undo(); 
     revertScheduled = false 
    } 
} 
editor.on("change", onchange) 
editor.commands.on("afterExec", afterExec) 

변경 사항이 불투명한지 여부를 테스트하여 되돌립니다.

+0

사전 정의 된 문자 (예 :;) 이외의 문자를 입력하지 말고 var shouldRevert = e.data.lines 을 설명하십시오. e.data.lines.length> 3 : /([dr])/.test(e.data.text) –

+0

죄송 합니다만, 나는 에이스 API에 익숙하지 않은 것으로 가정하고 정규식을 직접 처리 할 수 ​​있습니다. 필자는 질문에 설명 된 것과 정확히 일치하도록 예제를 업데이트했습니다. 삽입/제거 된 텍스트가 허용되는 문자 목록과 일치하는지 테스트하고 그렇지 않은 경우 변경 사항을 되돌립니다. –

+0

내 코드를 참조하십시오, 내 질문에 그것을 추가했습니다. 문제가있는 것 같습니다. 편집기를 가져올 수 없습니다 .CurOp –

관련 문제