【问题标题】:Calling javascript function with arguments using JSNI使用 JSNI 调用带参数的 javascript 函数
【发布时间】:2012-10-20 18:57:52
【问题描述】:

我正在尝试将 Mixpanel 与 GWT 集成,但在调用具有属性和值的事件时遇到问题。

我跟踪一个简单事件的函数(没有值):

 public native void trackEvent(String eventName)/*-{
        $wnd.mixpanel.track(eventName);
    }-*/;

有效。

但是当我想添加一些属性和值时,它就不能正常工作了:

public native void trackComplexEvent(String eventName, String property, 
            String value)/*-{
    $wnd.mixpanel.track(eventName, {property:value});

}-*/;

我有两个问题:

1) Mixpanel 说属性名称是:“property”(是的,我传递的变量的名称,而不是值)。

2) Mixpanel 说值是:undefined

mixpanel web 的一个例子是:

mixpanel.track("Video Play", {"age": 13, "gender": "male"});

所以,我想问题是我打错电话或使用错误类型的参数。

【问题讨论】:

    标签: javascript gwt jsni mixpanel


    【解决方案1】:

    您的问题是,当您传递创建属性对象时,您不会创建一个参数,该参数取自您的 property 名称,而是一个名为 property 的属性。如果您调试您的代码,您可以检查一个参数 property 是否已传递给您的 mixpanel.track 函数。

    要做你想做的事,你必须使用其他语法。

    public native void trackComplexEvent(String eventName, String property,
            String value)/*-{
        //create the property object you want to pass
        var propertyPassed = {}     
        // set the value you want to pass on the propertyPassed object
        propertyPassed[property] = value;
    
        //call your function with the argumetn you want to pass     
        $wnd.mixpanel.track(eventName, propertyPassed);
    }-*/;
    

    我通过在我的网站上创建一个 JavaScript 函数来测试您的代码:

    window.mixpanel = {
                track : function(eventName, props) {
                    alert(props.age);
                }
            }
    

    并调用它

        trackComplexEvent("hallo", "age", "13");
    

    警报是'13'

    BR, 斯蒂芬

    【讨论】:

    • 谢谢。有用。现在下一步是尝试传递一个 map :)
    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    相关资源
    最近更新 更多