我正在为jQuery jstree plugin
创建一个指令。
这是调用jstree
函数的方式(例如:get_path
和check_node
):
get_path (obj, glue, ids)
check_node (obj)
在我的指令发布链接函数中,我传递了一些我想在jstree init中执行的动作,所以我传递了一个像这样的对象:
vm.initActions = {
check_node: [nodesToCheck],
get_path: [obj, glue, ids]
};
然后执行这些功能:
if(scope.initActions){
Object.keys(scope.initActions).forEach(function(action){
if(scope.treeView.jstree(true).hasOwnProperty(action)){
scope.treeView.jstree(true)[action].apply(this, scope.initActions[action]);
}
});
}
正如您所看到的,我正在尝试将数组作为函数参数传递,因此它将是这样的:
scope.treeView.jstree(true).check_node(nodesToCheck);
scope.treeView.jstree(true).get_path(obj, glue, ids);
但这不起作用我收到了这个错误:
TypeError:无法读取未定义
的属性“设置”
如果错误(jstree.js):
,这就是源码this.check_node = function (obj, e) {
if(this.settings.checkbox.tie_selection)
另一方面,点差运算符工作正常:
if(scope.initActions){
Object.keys(scope.initActions).forEach(function(action){
if(scope.treeView.jstree(true).hasOwnProperty(action)){
scope.treeView.jstree(true)[action](...scope.initActions[action]);
}
});
}
不幸的是,我不能使用扩展运算符,因为我使用ES5。
我该如何解决这个问题?
答案 0 :(得分:0)
您可以使用该功能的apply
方法:
var context = scope.treeView.jstree(true);
context[action].apply(context, scope.initActions[action]);