Прикрепить кодовое зеркало к w2ui textarea - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь инициализировать codemirror внутри текстовой области w2ui.Текстовая область принадлежит форме, сгенерированной во всплывающем окне.Это код для формы:

var formConfig = {
    name: 'form_dataEdit',
    style: 'border: 0px; padding 5px',
    fields: [
        { name:'contents', type:'textarea', required: true, html:{attr:'style="width:'+width*0.7+'px;height:'+height*0.7+'px"'} },
    ],
    url: 'w2uiRecord_dataContents',
    recid: name,
    postData: {
        fileName : name
    },

    actions: {
        "Save": function () {
            w2ui.grid.lock('', true);
            $.ajax({
                url: "data_edit",
                type: "POST",
                datatype:"json",
                data: ({
                    "fileName":node.key,
                    "record" : JSON.stringify(this.record)
                }),
                success: function(response) {
                    w2ui.grid.unlock();
                    tab_objects.generate()
                }
            });
            $().w2popup('close');
            this.clear();
        }
    }
}

Я проверил этот код и работает хорошо.Тем не менее, когда я пытаюсь прикрепить codemirror, добавив следующее событие, оно не работает:

onRender: function (event) {
    event.onComplete = function () {
        console.log(this.fields[0].el) // undefined
        console.log(w2ui.form_dataEdit.fields[0].el) // undefined

        var codeMirror = CodeMirror.fromTextArea(
            this.fields[0].el,
            {
                'mode':{'name':'javascript'},
                'theme':'midnight'
            });
        codeMirror.setSize(width*0.7, height*0.7);
    }
}

Я инициализирую зеркало кода с помощью события onRender с onComplete, чтобы оно вызывалось после создания формы,однако w2ui.form_dataEdit.fields [0] .el (или this.fields [0] .el) не определено.Если я выполню этот код вручную на консоли после создания формы, она будет работать правильно.

Что мне не хватает?Как я могу убедиться, что форма доступна, прежде чем вызывать в ней codemirror?

1 Ответ

0 голосов
/ 12 октября 2018

Проблема в том, что форма onRender отображается / доступна, но не текстовая область внутри нее.Обходной путь должен добавить слушателя события к textarea.Это можно сделать внутри тега attr при определении полей формы следующим образом:

fields: [
    { name:'contents', type:'textarea', html: {attr:'onclick="initCodemirror()"'} }
]

, где initCodemirror () - функция, инициализирующая codemirror для текстовой области.Обратите внимание, что я использую onclick, так как onload не работает.

...