переименование проблемы узла jstree - PullRequest
3 голосов
/ 25 августа 2011

Я использую следующий код для переименования узла jstree (с помощью плагина crrm):

$('#categoriesTree').jstree('rename');

Как узнать, был ли узел успешно переименован (нажатием Enter) или отменено переименование (нажатием Esc)? Событие rename_node.jstree не предоставляет полезной информации.

1 Ответ

2 голосов
/ 22 ноября 2011

Вы не можете знать это по встроенным функциям, но вы можете изменить jquery.jstree.js. В несжатой версии найдите строку _show_input : function (obj, callback) (около строки 1263), и вы увидите:

"blur" : $.proxy(function () {
    var i = obj.children(".jstree-rename-input"),
        v = i.val();
    if(v === "") { v = t; }
    h1.remove();
    i.remove(); // rollback purposes
    this.set_text(obj,t); // rollback purposes
    this.rename_node(obj, v);
    callback.call(this, obj, v, t);
    obj.css("position","");
    console.log('click outside or blur after esc / enter'); 
}, this),
"keyup" : function (event) {
    var key = event.keyCode || event.which;
    if(key == 27) { this.value = t; this.blur(); 
         console.log('press esc'); 
         return; }
    else if (key == 13) { 
         this.blur(); 
         console.log('press enter'); 
         return; 
    } else {
        h2.width(Math.min(h1.text("pW" + this.value).width(),w));
    }
}, //...

Я добавил три строки здесь (console.log), и теперь вы можете видеть в консоли, что происходит с вашим узлом. Вместо console.log вы можете добавить некоторый класс к вашему элементу в качестве флага и прочитать его позже или сделать свое собственное событие, но я не знаю, как это сделать. Вам решать.

...