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

Accessing variable in .filter() scope with Mixpanel JQL

使用 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/jql/", "error": "Uncaught exception ReferenceError: selectedVal is not defined\n return user.properties[\"user-title\"] == selectedVal;\n ^\n\nStack trace:\nReferenceError: selectedVal is not defined\n at :6:70\n"}

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

编辑:

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

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

查看未缩小的 mixpanel-platform JSjql() 函数接受一个 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) {
    // ...
});