万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

AssetBundleでもScriptのジャンプできるように

AssetBundleでのオブジェクトはScriptのジャンプできない。 Editor拡張で、

        GameObject go = new GameObject();
        // 非アクティブにしないとAwake呼ばれる.
        go.SetActive(false);
        go.AddComponent(target.GetType());
        CustomGUI.ShowScriptLink(go.GetComponent<MonoBehaviour>());
        // Scriptをすぐ開けるように.
        MonoScript script = MonoScript.FromMonoBehaviour(obj);
        script = EditorGUILayout.ObjectField(script, typeof(MonoScript), false) as MonoScript;
        // 消さないと.
        DestroyImmediate(go);
        go = null;

ならいける・・。

templateを動的に指定したい go

templateで指定してるのを動的に変えたい。

ここに書いてるような指定をしたい。 go - Call other templates with dynamic name - Stack Overflow

どうやるのか?

{{template "Blah" .}}

{{$BlahVar := "Blah"}}
{{template $BlahVar .}}

みたいにできないものか・・・

Nullableから普通の値にする時 C#

キャストか.Valueのどっちがベターか?

stackoverflow.com

.GetValueOrDefault();があった・・。

Ginでテンプレートを入れ子

Help with nested template · Issue #339 · gin-gonic/gin · GitHub ここを見た。

go get github.com/gin-gonic/contrib/renders/multitemplate してから、

import (
        "github.com/gin-gonic/contrib/renders/multitemplate"
)

結局。親から子を指定しないといけない? 本当は子だけで完結したいのだが・・・・。

        templates := multitemplate.New()
        templates.AddFromFiles("contact",
                "templates/tra/Base.html",
                "templates/tra/Navbar.html",
                "templates/tra/Contact.html")

contactという名前で各テンプレートを集約?

そしてcontactc.HTML(200, "contact", gin.H{のとこで指定してる。 ここでshops/index.tmplのようにいつもしてたようなところが、contactになるっぽい。

        controller.Router.HTMLRender = templates
        controller.Router.GET("/contact", func(c *gin.Context) {
                c.HTML(200, "contact", gin.H{
                "title": "Contact",
                "stuff": "Interesting contact stuff",
                })
        })

templates/tra/

traってのはテキトーなので気にせず。

templates/tra/Base.html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>{{.title}}</title>
</head>
<body>
{{ .hoge }}
</body>
</html>

templates/tra/Navbar.html

{{define "navbar"}}
<div class="nav">This is a navbar</div>
{{end}}

templates/tra/Contact.html

{{define "contact"}}
<div>
    Contact content
    {{.stuff}}
</div>
{{end}}

しかし、親、つまり「templates/tra/Base.html」に子のtemplateの指定を書かないといけないのは不便だ。 子側から親を指定した方が便利だと思うけど、子が変わるのだがどうやるべき??

ginルーティングでかぶる時

以下のように、ルーティング設定すると、

controller.Router.GET("/shops/:shop_id", controller.getShop)
controller.Router.GET("/shops/new", controller.newShop)

以下のエラーが発生する。

panic: wildcard route ':shop_id' conflicts with existing children in path '/shops/:shop_id'

github.com/gin-gonic/gin/issues/388に同じハマり方してる人がいる。 直す方法は不明。

これだと、Railsみたいなルーティングができないね。

Rails のルーティング | Rails ガイド

おそらくginというよりHttpRouterのバグか。

non-wildcard and wildcard router conflict, why? · Issue #210 · julienschmidt/httprouter · GitHub

gin/tree.goaddRouteを直したい。

gin/tree.go at develop · gin-gonic/gin · GitHub