我正在嘗試為 epub 創建一個 toc.ncx (只是一個 XML)文件。在這樣的目錄中,<navpoint>定義了 s,每個都有一個 id 和一個“播放順序”。Go模板有什么方法可以簡單地計算導航點嗎?我想過這樣的事情(非工作模板代碼){{$counter := 0}}{{define "NAVPOINT"}} {{$counter = $counter + 1}} <navpoint id="{{.}}" playorder="{{$counter}}">{{end}}{{range .TopLevel }} {{template "NAVPOINT" .Id}} {{range .SecondLevel }} {{template "NAVPOINT" .Id}} </navpoint> {{end}} </navpoint>{{end}}示例結構 { TopLevel: [ { Id: "id-a" SecondLevel: [ { Id: "scnd-a" } { Id: "scnd-b" } ] } { Id: "id-b" SecondLevel: [ { Id: "scnd-c" } { Id: "scnd-d" } ] } }這會給我這樣的東西 <navpoint id="id-a" playorder="1"> <navpoint id="scnd-a" playorder="2"></navpoint> <navpoint id="scnd-b" playorder="3"></navpoint> </navpoint> <navpoint id="id-b" playorder="4"> <navpoint id="scnd-c" playorder="5"></navpoint> <navpoint id="scnd-d" playorder="6"></navpoint> </navpoint>我想我可以使用模板功能,而不是模板來實現這一點,但不知道如何實現這一點。模板函數可以有計數器嗎?
1 回答

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
這是我現在使用的功能:
"navpoint": func() func(...string) string {
i := 0
return func(id ...string) string {
if len(id) < 1 {
return "</navPoint>"
}
i++
return `<navPoint id="` + id[0] + `" playorder"` + strconv.Itoa(i) + `">`
}
},
我在模板中以這種方式使用它:
{{$navpoint := navpoint}}
{{range .TopLevel }}
{{call $navpoint .Id}}
{{range .SecondLevel }}
{{call $navpoint .Id}}
{{call $navpoint}}
{{end}}
{{call $navpoint}}
{{end}}
如果使用 id (XX) 調用“navpoint”,它會給出開始標簽<navpoint id="XX" playorder="##">。在沒有 id 的情況下調用時,它會給出結束標簽</navpoint>
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報
0/150
提交
取消