情境:
我有一个级联场景,其中第二个下拉列表中的值取决于第一个。我有三个模板" layout"," input"和"内部"。
尝试:
我正在改变第一次下拉菜单中输入#j;输入"模板并坚持处理返回的响应。目前我找到了通过替换第二个下拉列表的html来修复它的方法。但是,我认为这不是更好的处理方式。我想要一些渲染模板,我不需要修改html。
请以更好的方式帮助完成任务或指向一些维基。 仅限标准库
谢谢,
的layout.html : http://play.golang.org/p/LikKy6rf3-
Input.html : http://play.golang.org/p/wM7EpPdXuM
Inner.html : http://play.golang.org/p/xFpInKZfFT
Main.go : http://play.golang.org/p/cxtJU-Lhi1
答案 0 :(得分:1)
在更高级别,您有2个选项:
onchange
触发)并从结果中填充列表。您还有两个选项可以执行此操作:
AJAX调用返回HTML调用,您只需用它来替换HTML <select>
标记的内部HTML。
或者AJAX调用可能只返回数据(例如使用JSON编码),而Javascript代码可以构建列表的内容。
AJAX调用可能会返回需要替换为<select>
的内部HTML的完整HTML代码。要在服务器端实现此目的,您可以创建/分离仅负责生成HTML代码的HTML模板,例如:
{{define "innerList"}}
{{range .}}
<option value="{{.Key}}">{{.Text}}</option>
{{end}}
{{end}}
您只能执行以下模板:
// tmpl is the collection of your templates
values := ... // Load/construct the values
tmpl.ExecuteTemplate(w, "innerList", values)
此处values
是以下结构的一部分:
type Pair struct {
Key string
Text string
}
<select>
内容
AJAX调用可能会返回一个JSON数据结构,一个value;text
对的数组/列表,您可以从中自行添加<option>
子标记。
将<option>
添加到<select>
代码:
var x = document.getElementById("mySelect");
var option = document.createElement("option");
option.value = "1234";
option.text = "Kiwi";
x.add(option);
所以基本上你需要做的是删除<select>
的当前子项,迭代收到的列表作为响应,并添加一个新的<option>
标记。