.bind(«move_node.jstree», .. -> data.rslt.obj не определено. Как получить данные узла?

#jstree

#jstree

Вопрос:

У меня есть настраиваемая функциональность для check_move:

 crrm : {
        move : {
            "check_move" : function (m) {

                var p = this._get_parent(m.o);
                if(!p) 
                    return false;
                if(m.cr===-1)
                    return false;
                return true;        
                }

        }   
    },
  

Кажется, это работает так, как задумано.
Затем я пытаюсь привязаться к событию «move_node», чтобы обновить свою базу данных:

 .bind("move_node.jstree",function(event,data){
    if(data.rslt.obj.attr("id")==""){
         /* I omitted this snippet from this paste - it's really long and it basically does the same thing as below, just gets the node's id in a more complicated way*/
    } else { 
        controller.moveNode(data.rslt.obj.attr("id"),data.inst._get_parent(this).attr("id"),data.rslt.obj.attr("rel"));
    }   
})
  

Это приводит к ошибке. data.rslt.obj не определен. Я действительно в недоумении, что делать, я привязывался к нескольким событиям раньше, и вот как я это сделал.

Как я могу получить атрибуты узла и т.д. После события move_node, если data.rslt.obj не работает?

О, controller.moveNode() — это одна из моих собственных функций, так что не просто копируйте-вставляйте, если пытаетесь изучить jstree.

Ответ №1:

Я нашел ответ на свой собственный вопрос довольно скоро после того, как спросил об этом (типично).

Нужно использовать data.rslt.o.attr(«id») вместо -.obj.- Странное несоответствие, если вы спросите меня.

Я бы удалил это сообщение, но я думаю, что это может быть довольно распространенной проблемой. Если кто-то думает иначе, не стесняйтесь удалять.

Ответ №2:

 if(!p)
  return false;
if(m.cr===-1)
  return false;

return true;
  

в следующий раз попробуйте сделать это так:

 return (p amp;amp; m.cr !== -1);