使用jsPlumb拖动div时,其id尚未从AngularJS绑定

时间:2017-06-11 20:20:37

标签: angularjs jsplumb

我的流程图使用jsPlumb使节点可拖动,稍后允许节点之间的连接。但是,即使只是拖动我也会被错误所阻止。

每当我拖动一个节点时,控制台都会为每个移动的像素记录一条错误消息。该错误为jsPlumb function failed : TypeError: Cannot read property 'el' of undefined,我设法将其追踪到jsplumb.js第4919行 在那里,局部变量elId(代表节点id的{​​{1}})被正确设置为div。但是,在node-1对象内部,节点将使用键managedElements保存。因此,在尝试访问node-{{$ctrl.node.id}}时(在第4919行),找不到(正确的)managedElements[elId].el作为键,这会提示上述错误。

设置elId时我无法弄清楚。属于节点managedId的控制器具有以下代码(.component服务只返回JsPlump):

jsPlumbInstance

我还尝试在模板完全链接时设置const NodeController = ['$element', 'JsPlumb', function ($element, JsPlumb) { const nodeDiv = $element.children('.node'); JsPlumb.draggable(nodeDiv); }]; 方法(我是AngularJS的新手,并且不确定在调用控制器时是否进行了插值):

draggable

每当触发鼠标移动事件时,所有这些片段仍会在控制台中产生错误。

您是否了解我如何解决此错误?我可以以某种方式为const NodeController = ['$element', 'JsPlumb', function ($element, JsPlumb) { const ctrl = this; ctrl.$postLink = function () { const nodeDiv = $element.children('.node'); JsPlumb.draggable(nodeDiv); }; }]; 提供正确的id吗?

1 个答案:

答案 0 :(得分:0)

问题在于$element没有插入id,因此带有无效id的元素被传递到jsPlumb并保存在managedElements中。

由于我不知道如何访问控制器内的插值元素,我手动重置控制器中元素的id,然后将元素传递给jsPlumb。