在Golang中,可以在更新变量时刷新模板的一部分吗? 这是我们可以在Angular.js中找到的东西。
基本上在我的代码中,我通过ajax中的邮政编码查找地址,这显示了我为此邮政编码找到的addr列表。
目前,ajax调用GO例程。我不想在JS中获得结果,并根据ajax调用的结果构建html。
我希望,如果可能的话,只更新地址值(它是一个数组),因为我已经动态地构建了addr列表。
有任何线索吗?
答案 0 :(得分:2)
模板引擎不支持这种开箱即用的功能。
所以你必须自己实现它。这并不难。以下是您应该遵循的步骤:
使用{{define "name"}}
操作将呈现地址的模板分开。您可以将其放在不同的模板文件中,并使用{{template "name"}}
操作将其包含在当前位置,也可以将其保留在原始位置并使用新的{{block "name" pipeline}} T1 {{end}}
操作(在Go 1.6中引入)它定义模板并立即执行。
确保您有一个处理程序,该处理程序仅执行呈现收件人的新模板。执行Addressees模板的结果应直接发送到输出(w http.ResponseWriter
)。
请注意,您可以使用1个处理程序来执行“完整”页面模板和仅执行Addressees模板(例如,根据URL参数进行决定),或者您可能有2个不同的处理程序,这完全取决于您。
现在在客户端想要刷新/重新呈现收件人时,对只执行并呈现收件人模板的处理程序进行AJAX调用。
当这个AJAX调用完成时,你可以简单地使用AJAX调用的响应文本来替换Addressees的包装器标签的HTML内容。
看起来像这样:
var e = document.getElementById("addressees");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
e.outerHTML = xhr.responseText;
}
}
xhr.open("GET", "path-to-addresses-render", true);
try {
xhr.send();
} catch (err) {
// handle error
}
Gowut(这是一个使用纯Go构建单页Web应用程序的Web框架)类似于仅更新网页的部分而没有完整页面重新加载(尽管它不使用模板后端方面)。 (披露:我是Gowut的作者。)
您可以在其js.go
文件中查看Gowut如何处理的确切Javascript代码(查找rerenderComp()
Javascript函数)。