Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        5个月前关闭。
                                                                                            
                
        
总菜鸟。尝试扩展一些代码以使其更加灵活。我设法将需要的语句的“片段”放入数组中。但是,现在我想让语句运行,并且我不知道该如何整理并创建一个经过评估的语句。

<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])之类的各种东西,但我觉得自己只是在黑暗中刺伤

最佳答案

在黑暗中刺伤确实不是编程的方法!

实际上,您离您并不遥远。 [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);。老实说,这会比较整齐。

08-27 14:53