Событие триггера редактора Ace с использованием javascript

Есть ли что-то вроде

editor.getSession.trigger('change')

причина, по которой я хочу этого, заключается в том, что редактор входит и выходит из нового, поэтому, когда он возвращается в поле зрения, мне нужно, чтобы он выполнял свои обычные «изменения», но я не хочу ждать ввода пользователя?

В настоящее время у меня есть

editor.getSession().on('change', function(){
    editorChangeHandler()
})

и я просто вспоминаю

        editorChangeHandler()

когда мне нужно, но editor.getSession.trigger('change') намного приятнее.


person Eoin Murray    schedule 15.04.2013    source источник


Ответы (2)


editor.session._emit('change') вызовет editorChangeHandler, но фальшивое событие изменения нарушит историю отмен.

person a user    schedule 16.04.2013
comment
Я попробовал этот подход и получил ошибку ace.js:7973 Uncaught TypeError: Cannot read property 'row' of undefined - person Mike; 07.04.2017
comment
Мне пришлось сделать что-то вроде: editor.getSession()._emit('change', {start:{row:0,column:0},end:{row:0,column:0},action:'insert',lines: []}) - person Mike; 07.04.2017

причина, по которой я хочу этого, заключается в том, что редактор входит и выходит из нового, поэтому, когда он возвращается в поле зрения, мне нужно, чтобы он выполнял свои обычные «изменения», но я не хочу ждать ввода пользователя?

Вы можете попробовать альтернативное решение, используя underscore.js.

Изменять:

editor.getSession().on('change', function(){
    editorChangeHandler()
})

to:

editor.getSession().on('change', _.debounce(function() {
    editorChangeHandler()
}, 100))

когда вы запускаете изменение, это выглядит так:

editor.setValue('my change..');

тогда он будет вести себя как ваше желание:

editor.getSession.trigger('change')
person Chetabahana    schedule 15.10.2019