2015-01-31 3 views
3

온라인 웹 페이지 편집기를 쓰고 미래의 복원을 위해 현재보기/서버에서 작업하고 싶습니다. 나는 또한 여러 탭을 원한다.에이스 편집기 - POST를 통해 서버에 세션 저장/보내기

나는 그것이 editor.getSession()editor.setSession()이라는 것을 알고있다.

JS :

var editor = ace.edit("description"); 
editor.session.setMode("ace/mode/javascript"); 
editor.setTheme("ace/theme/tomorrow"); 
editor.setShowPrintMargin(false); 
editor.setOptions({ 
    enableBasicAutocompletion: true, 
    enableSnippets: true 
}); 

는 지금은 요소에 jQuery를 $.data()를 통해 세션을 저장하려고 :

$('#tab1').data('sesi',editor.getSession()); //save session 
editor.setSession($('#tab2').data('sesi')); //restore other session 

그러나이 코드는 작동하지 않습니다. console.log(editor.session);을 시도 할 때 콘솔에 많은 코드가 표시됩니다.

$.ajax({ 
    type: "POST", 
    url: "aaaaa.php", 
    cache: false, 
    timeout: 10000, 
    data: "session="+ editor.session 
}); 

어떻게 변수에 또는 서버에 세션을 저장하는 ...

나는 POST 데이터를 통해 서버에 session을 보낼 시도했지만 네트워크 콘솔 나는 편집기 아무것도 더에서만 코드를 볼 수?

답변

5

서버에 세션을 저장하려면 json.Stringify에 전달할 수있는 일반 객체로 변환해야합니다. 지금

var filterHistory = function(deltas){ 
    return deltas.filter(function (d) { 
     return d.group != "fold"; 
    }); 
} 

sessionToJSON = function(session) { 
    return { 
     selection: session.selection.toJSON(), 
     value: session.getValue(), 
     history: { 
      undo: session.$undoManager.$undoStack.map(filterHistory), 
      redo: session.$undoManager.$redoStack.map(filterHistory) 
     }, 
     scrollTop: session.getScrollTop(), 
     scrollLeft: session.getScrollLeft(), 
     options: session.getOptions() 
    } 
} 

sessionFromJSON = function(data) { 
    var session = require("ace/ace").createEditSession(data.value); 
    session.$undoManager.$doc = session; // workaround for a bug in ace 
    session.setOptions(data.options); 
    session.$undoManager.$undoStack = data.history.undo; 
    session.$undoManager.$redoStack = data.history.redo; 
    session.selection.fromJSON(data.selection); 
    session.setScrollTop(data.scrollTop); 
    session.setScrollLeft(data.scrollLeft); 
    return session; 
}; 

세션의 상태를 얻을 수 session.getValue로 예 session="+ editor.session 단순히 동일 session.toString를 호출 할

var session = editor.session 
var sessionData = sessionToJSON(session) 
$.ajax({ 
    type: "POST", 
    url: "aaaaa.php", 
    cache: false, 
    timeout: 10000, 
    data: JSON.stringify(sessionData) 
}); 

서버에서 복원 할

var session = sessionFromJSON(JSON.parse(ajaxResponse)) 
editor.setSession(session) 
+0

'data = sessionToJSON (session)'이'data = sessionToJSON (editor.session)'으로 바뀌고'data : JSON.stringify (editor.session)'가'data : JSON.stringify (data)'. – Peter

+0

@a user, 이것은 정의되지 않은 변수이기 때문에'session' 만 사용할 수 없습니다. 'editor.session'은 corectly입니다. – Peter

+0

죄송합니다. 오타가있었습니다. 이 코드는'session'을 어떻게 얻을 수 있는지를'editor.session' 또는 세션을 전달하는 다른 함수로부터 가져 오는 것으로 가정합니다. –