使用JSNI使用参数调用javascript函数

时间:2012-10-20 03:24:01

标签: javascript gwt jsni mixpanel

我正在尝试将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网站的一个例子是:

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

所以,我猜问题是我正在做错误的电话或错误的参数类型。

1 个答案:

答案 0 :(得分:4)

你的问题是,当你传递你创建属性对象时,你不是创建一个参数,取自你的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, 斯蒂芬