【问题标题】:Accessing variable in .filter() scope with Mixpanel JQL使用 Mixpanel JQL 访问 .filter() 范围内的变量
【发布时间】:2017-09-19 09:39:23
【问题描述】:

使用 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": "未捕获异常 ReferenceError: selectedVal 未定义\n return user.properties[\"user-title\"] == selectedVal; \n ^\n\n堆栈跟踪:\nReferenceError: selectedVal 未定义\n at :6:70\n"}

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

编辑:

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

【问题讨论】:

  • 可以提供mvp吗?有线。

标签: javascript api mixpanel


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    查看未缩小的 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) {
        // ...
    });
    

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 2018-05-26
      • 1970-01-01
      • 2011-06-01
      • 2012-02-23
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多