2016-04-18 4 views
0

Я просто хочу, чтобы убедиться, что я не делаю что-то неправильно, прежде чем я подам об ошибке/начать рыть в GWT-Charts кода ...GWT-Charts ColumnFunction не работает?

Попытка стилизации 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); 

(I пришлось добавить RoleType.STYLE сам, специально построенный 0.9.11-SNAPSHOT от Master)

Но добавив, что результаты столбцов в (с использованием новых JSONObject (столбцы)):

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

Обратите внимание на пустой набор для «calc»?

Я пробовал просто делать ColumnFunction для данных (возвращающ плоское значение) в случае, если роль «стиль» требуется больше, чем просто добавление в RoleType Enum, и это также похоже не проходит.

JSNI в DataViewColumn.setCalc (ColumnFunction) кажется мне правильным, так что я не уверен, где проблема лежит ...

UPDATE:

Ввод отладочные в ColumnFunction показал он должен работать, но выход, похоже, не привык.

Оказывается, что DataViewColumn.setCalc отсутствовал оператор return в своей обертке JSNI.

+0

коммита, я построил на: https://github.com/google/gwt-charts/commit/586282f34d6251a0ac9ab451c4918594d8e9e39f Вся моя смена добавлял «стиль (» стиль «)» для перечисления RoleType. –

ответ

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) { 
     [email protected]::calc(Lcom/googlecode/gwt/charts/client/DataTable;I) (dataTable, row); 
    }; 
}-*/; 

был не возвращает значение, вычисленное с помощью функции, только вычисления.

Добавление «возврата» к строке в самом внутреннем блоке устраняет проблему.