Blog do projektu Open Source JavaHotel

niedziela, 3 kwietnia 2011

GWT + CSS + JSON

I'm not very happy with my previous solution - I mean that I call one, named JavaScript function for modifying style for the row.
In this example it does not matter but assume that we have a lot of views and every view requires different row modifier. Calling one JavaScript function for all view is not a good idea.
So I decided to introduce "dynamic" JavaScript function - the name of JavaScript function is taken from resource  and can vary.
So instead of:
private class AddStyle implements RowStyles<EmployeeRecord> {
        @Override
        public String getStyleNames(EmployeeRecord row, int rowIndex) {
....
String jsString = js.createJsonString();
return jsAddStyle(parseJson(jsString));
        }
    }
public static native String jsAddStyle(JavaScriptObject o) /*-{
                return $wnd.jsAddStyle(o);
    }-*/;

The following code was introduced (code).
private class AddStyle implements RowStyles<EmployeeRecord> {
private final String jsString;
        @Override
        public String getStyleNames(EmployeeRecord row, int rowIndex) {

String jsString = js.createJsonString();
            return callJsStringFun(jsFun, jsString);
        }
    } ....

public static native String callJsStringFun(String jsonFun, String paramS) /*-{
                return $wnd.eval(jsonFun + '(\'' + paramS + '\')');
    }-*/;

JavaScript function should follow the pattern. Of course - in this example jsString (as above) should be equal to 'jsAddStyle'.

function jsAddStyle(s) {
          var o = eval('(' + s + ')');
          var job = o.Employee.job;
          if (job == 'MANAGER') { return 'addRow'; }
             return null;
        }

So this way every view could have its own customized function identified by name.

Brak komentarzy:

Prześlij komentarz