読者です 読者をやめる 読者になる 読者になる

たぷつきません

おなかがでてきた。もうたぷついてるやん。

マルチビューへの道

 どうも、ContentSectionの実装クラスに付加させる、@InjectContentアノテーションが、ビューを分岐する仕掛けっぽい。もうちょい調べよう。
 最初は "home" セクションの@InjectContentの内容が表示された。しかし相変わらずContentSectionのinitメソッドは呼び出されないようだ。InjectContentの内容の後に、Gadget.initが呼び出されるんだけど、ViewFeatureのgetCurrentView().getName() を取得すると、"home"ではなく、"profile" になってしまっている。理由はわからない。ViewFeatureのgetCurrentViewはあてにならないということかな。
 できたJSを見ると、どうも"home"はない。

gadgets.config.init({ ...
    "views": {
        "canvas": {
            "aliases": [
                "FULL_PAGE"
            ], 
            "isOnlyVisible": true, 
            "urlTemplate": "http://www.gmodules.com/gadgets/ifr?{var}"
        }, 
        "profile": {
            "aliases": [
                "DASHBOARD", 
                "default"
            ], 
            "isOnlyVisible": false, 
            "urlTemplate": "http://www.gmodules.com/gadgets/ifr?{var}"
        }
    }
... });

しかし、上記のコードのすぐ後で、以下のような記述が。

window.gadgetViewName = 'home';

 うーん、何をやりたいんだ。NeedsViews で得たViewFeatureは"home"を知らないし、ガジェット自体はhomeのContentを扱っているという状態になっている感じ。
 というわけで、ViewFeatureのgetCurrentView()を見ずに、JSNIで $wnd.gadgetViewName を取得すれば判断が付くようになった。

@Override
protected void init(HelloPreferences prefs) {
    String viewName = //_viewFeature.getCurrentView().getName();
        getGadgetViewName();
        
    if (GadgetViewConst.PROFILE.equals(viewName)) {
        initProfileView(prefs);
    } else if (GadgetViewConst.HOME.equals(viewName)) {
        initHomeView(prefs);
    } else if (GadgetViewConst.CANVAS.equals(viewName)) {
        initCanvasView(prefs);
    }
}

private final native String getGadgetViewName() /*-{
    return $wnd.gadgetViewName;
}-*/;

とりあえずこれだと、Profileのビューは一切呼び出されない。homeとcanvasだけしか分岐しない。GoogleカレンダーiGoogleでコンテナの違いがあるからなんだろーなー。