总菜鸟。尝试扩展一些代码以使其更加灵活。我设法将需要的语句的“片段”放入数组中。但是,现在我想让语句运行,而且我不知道该如何整理并创建一个经过评估的语句。
<div class="qvinsert" data-qvid="PQHxsX" data-app-ref="app1"></div>
var app1 = qlik.openApp('fe96772a-caa7-442d-a77f-ed68764942ec', config);
$(".qvinsert").each(function() {
var viz = {
v: $(this).data("qvid"),
a: $(this).data("appRef")
};
console.log(viz); //{v: "PQHxsX", a: "app1"}
app1.getObject(this, "PQHxsX") //the line I'd like to create. If I write it out like this it works.
尝试了诸如[viz.a].getObject(this,[viz.v])
之类的各种事情,但我觉得自己只是在暗中刺伤
答案 0 :(得分:3)
在黑暗中刺伤确实不是编程的方法!
您实际上离您不太远。 [viz.v]
有一些多余的括号(您已经在此处创建了一个单元素数组)—仅viz.v
已经是您要用作该函数参数的字符串。
将字符串"app1"
(即viz.a
的值)转换为对app1
的实际引用需要花费一些额外的工作,但是由于所有全局变量都以window
对象的属性,您可以使用类似数组的语法访问这些属性。
因此,再次说明,尽管仅将变量括在数组文字括号内是没有用的,但具有讽刺意味的是,它离解决方案也不远:
window[viz.a].getObject(this, viz.v);
这应该可以解决问题。
但是,如果app1
不是 全局变量,而我们不能从您的问题中真正看出这一点,那么您应该考虑将其放在一个对象中,该对象可以按名称在索引中同样的方式:
var apps = {
"app1": qlik.openApp('fe96772a-caa7-442d-a77f-ed68764942ec', config)
// can add more possibilities here!
};
然后是apps[viz.a].getObject(this, viz.v);
。老实说,这会比较整齐。