GWT-Charts ColumnFunction无法正常工作?

时间:2016-04-18 16:57:22

标签: gwt google-visualization jsni

我只是想在我提交错误/开始挖掘GWT-Charts代码之前确保我没有做错事......

尝试设置LineChart样式:

DataViewColumn ret = DataViewColumn.create(new ColumnFunction() {
    @Override
    public Object calc(DataTable dataTable, int row) {
        if (dataTable.isValueNull(i, dataColumn) 
                || dataTable.getValueNumber(i, dataColumn) < value) {
            return "color: red";
        }
        return "color: green";
    }
}, ColumnType.STRING);
ret.setRole(RoleType.STYLE);

(我必须自己添加RoleType.STYLE,自定义构建0.9.11-SNAPSHOT关闭Master)

但是添加该列会导致(使用新的JSONObject(列)):

{
  "0":{"sourceColumn":0}, 
  "1":{"sourceColumn":1, "label":"Data"}, 
  "2":{"calc":{}, "type":"string", "role":"style"}
}

注意“calc”的空集?

我尝试为数据执行ColumnFunction(返回一个平面值),以防“style”角色需要的不仅仅是添加到RoleType枚举,而且似乎也没有通过。

DataViewColumn.setCalc(ColumnFunction)中的JSNI似乎对我来说是正确的,所以我不确定问题出在哪里......

更新:

将调试语句放在ColumnFunction中显示它正在运行,但输出似乎没有被使用。

事实证明,DataViewColumn.setCalc在其JSNI包装器中缺少return语句。

1 个答案:

答案 0 :(得分:0)

DataViewColumn.setCalc:

/**
 * Sets a function that will be called for each row in the column to calculate a value for that cell.
 * 
 * @param columnFunction a function for calculating each row value
 */
public final native void setCalc(ColumnFunction columnFunction) /*-{
    this.calc = function(dataTable, row) {
        columnFunction.@com.googlecode.gwt.charts.client.ColumnFunction::calc(Lcom/googlecode/gwt/charts/client/DataTable;I) (dataTable, row);
    };
}-*/;

没有返回函数计算的值,只计算它。

将“return”添加到最里面的块中的行可以解决问题。