2016-08-26 6 views
3

をJS私はジンのテンプレートを使用していますが、私は、変数(ユーザ名)を渡したいどのようにすべてにわたって変数にアクセスするHTMLのファイルが行く-ジン

c.Writer.Header().Set("username", "myname") 
c.HTML(200, "myservices", gin.H{ 
    "title": "Dashboard", 
    "username": "myname" }) 

を使用するHTMLをレンダリングするために私ができるように、私のテンプレートに添付されたjsファイルにアクセスしてください。 {{.username}}を使って、テンプレートのユーザー名変数にアクセスできます。どうすればグローバルにすることもできるので、すべてのjsファイルにもアクセスできます。ヘッダーに設定しようとしましたが、HTMLが読み込まれたときにしかアクセスできません。私はテンプレートがロードされる前にそれを使用することはできません。

答えて

2

Javascript変数を作成するHTMLページ(例:<head>セクション)にJavaScriptコードを挿入し、テンプレート実行に渡されたパラメータでJavaScriptコードを初期化することができます。

これは、HTMLドキュメント( Go Playground上でそれを試してみてください)、その結果
func main() { 
    t := template.Must(template.New("").Parse(templ)) 
    m := map[string]interface{}{ 
     "title": "Test page", 
     "username": "bob", 
     "counter": 12, 
    } 
    if err := t.Execute(os.Stdout, m); err != nil { 
     panic(err) 
    } 
} 

const templ = `<html><head> 
<script> 
    var _title = {{.title}}; 
    var _username = {{.username}}; 
    var _counter = {{.counter}}; 
</script> 
</head><body> 
</body> 
</html>` 

<html><head> 
<script> 
    var _title = "Test page"; 
    var _username = "bob"; 
    var _counter = 12 ; 
</script> 
</head><body> 
</body> 
</html> 

これが何を意味するのかは、そのページ内の他のJavascriptコード(いずれかのインライン化され

この例を参照してください。外部参照)は、変数_title,_username,_counterを参照し、それらを通常の変数として使用し、Template.Execute()に渡された値で初期化されます。

html/templateパッケージがコンテキストエスケープを実行することに注意してください。 stringであるため、{{.title}}の結果が引用符で囲まれていることを確認してください。intの値であるため、{{.counter}}の結果を挿入するときに引用符は追加されません。

また、他のJavascriptコードで使用される可能性のある既存の変数や変数との衝突を避けるため、固有の命名方法を使用する必要があります。通常、特別な接頭辞(または接尾辞)がそれを行います。

また、この関連の質問をチェックアウト:Referencing Go array in Javascript

+0

私たちは本当にTemplate.Execute()を使用する必要があります。私はc.HTMLを使用した方法と同じように変数を渡すことはできませんか?これらの変数に '{{.username}} 'としてアクセスできます。あなたのようにグローバル変数として保存することはできませんか? – aaj

+0

@ love2codeこれを使う必要はありません。単に 'c.HTML()'を使って渡すことができます。 'github.com/gin-gonic/gin'パッケージをそこにインポートすることができないので、私は' Template.Execute() 'を使ってGo Playgroundで動作します。 Javascript変数を作成して初期化する原則は重要ですが、残りはGo Playgroundで実行できるようになっています。 – icza

関連する問題