Поэтому я встроил редактор Ace в проект WT и загрузил в него копию файла Ace.js в качестве теста, чтобы посмотреть, как он выглядит. Загрузка прошла нормально, поэтому я попытался ее сохранить и заметил, что моя функция сохранения не вызывается. После некоторой отладки я заметил, что моя функция сохранения не вызывается, если файл, который я пытаюсь сохранить, превышает 70000-80000 символов, вызывается нормально и передает данные, если файл меньше. Как мне обойти это ограничение при попытке сохранить большие файлы? Код, который я запускаю в проекте WT, можно увидеть ниже, с более подробной информацией о том, как его встраивать здесь. Использование ACE с WT
WText *editor;
MyClass::MyClass(const WEnvironment& env)
: WApplication(env)
{
wApp->require("lib/src/ace.js");
// A WContainerWidget is rendered as a div
editor = new WText("function(){\n hello.abc();\n}\n", root());
editor->setInline(false);
editor->resize(500, 500);
std::string editor_ref = editor->jsRef(); // is a text string that will be the element when executed in JS
std::string command =
editor_ref + ".editor = ace.edit(" + editor_ref + ");" +
editor_ref + ".editor.setTheme(\"ace/theme/monokai\");" +
editor_ref + ".editor.getSession().setMode(\"ace/mode/javascript\");";
editor->doJavaScript(command);
JSignal <std::string> *jsignal = new JSignal<std::string>(editor, "textChanged");
jsignal->connect(this, &MyClass::textChanged);
WPushButton *b = new WPushButton("Save", root());
command = "function(object, event) {" +
jsignal->createCall(editor_ref + ".editor.getValue()") +
";}";
b->clicked().connect(command);
}
void MyClass::textChanged(std::string incoming)
{
}
Теперь с помощью приведенного выше кода функция textChanged будет вызываться при нажатии кнопки Сохранить. Однако, если загружен большой файл, я использовал приведенную ниже функцию и заменил «function () {\ n hello.abc (); \ n} \ n» на вызов этого метода.
std::string MyClass::ReadFile(std::string path)
{
std::ifstream in(path, std::ios::in | std::ios::binary);
if(in)
{
std::string contents;
in.seekg(0, std::ios::end);
contents.resize(in.tellg());
in.seekg(0, std::ios::beg);
in.read(&contents[0], contents.size());
in.close();
return(contents);
}
throw(errno);
}
Как упоминалось ранее, я загрузил Ace.js, длина которого составляет около 15 000 строк. Это вызвало сбой моего вызова сохранения. Хотя я уверен, что любой другой файл, превышающий 80 000 символов, также приведет к сбою. Заранее спасибо!
Возможно, max-request-size в wt_config.xml необходимо увеличить. Это 128K по умолчанию.
Других решений пока нет …