使用Mixpanel JQL访问.filter()范围中的变量

时间:2017-09-19 09:39:24

标签: javascript api mixpanel

使用Mixpanel& JQL我试图从.filter()函数中的全局范围访问变量,所以我只能查询所需的记录:

var selectedVal = 'foo';

MP.api.jql(function main() {
    return People()
        .filter(function(user) {
            // Compare with 'selectedVal'
            return user.properties["user-title"] == selectedVal;
        })
    ; 
}, selectedVal).done(function(results) {
    // ...
});

错误:

  

{“request”:“/ api / 2.0 / jq /”,“error”:“未捕获异常ReferenceError:未定义selectedVal \ n返回user.properties [\”user-title \“] == selectedVal; \ n ^ \ n \ n堆栈跟踪:\ n参考错误:未定义selectedVal \ n在:6:70 \ n“}

如果有人能指出我正确的方向,那就太好了。谢谢

编辑:

目前,我正在使用解决方法,获取所有人员实体并在之后进行过滤。这根本不是最优的,因此我仍然在寻找一种方法来获得People实体的属性条件的结果集。

2 个答案:

答案 0 :(得分:1)

使用bind。您可以在MP.api.jql块之外和jql函数内声明函数,您可以作为参数main.bind(null,whatever)传入。

答案 1 :(得分:0)

查看未明确的 mixpanel-platform JS jql()函数接受params对象作为第二个参数:

...

jql: function(script, params, settings) {
  params = params || {};
  settings = _.extend({type: 'POST'}, settings);
  return this.query('/api/2.0/jql/', {
    script: String(script),
    params: JSON.stringify(params)
  }, settings, function(data) {
    return JSON.parse(data);
  });
},

...

<强>解决方案:

var params = {
    selectedVal : 'foo'
};

MP.api.jql(function main() {
    return People()
        .filter(function(user) {
            return user.properties["user-title"] == params.selectedVal;
        })
    ; 
}, params).done(function(results) {
    // ...
});