当变量更新时,动态刷新模板的一部分(使用golang)

6
在Golang中,如果更新了某个变量,可以刷新模板中的部分内容吗?例如,在Angular.js中就可以做到这一点。
基本上,在我的代码中,我通过ajax按邮政编码查找地址,然后显示出该邮政编码下的地址列表。
以下是模板的示例: enter image description here 目前,ajax调用了一个GO例程。我不想在JavaScript中获取结果并从ajax调用的结果构建html。
如果可能的话,我想只更新地址值(它是一个数组),因为我已经动态生成了地址列表。
有什么线索吗?
1个回答

9

这个模板引擎不支持这个功能。

因此,您需要自己实现。这并不难。以下是您应该遵循的步骤:

1. 重构您的模板

使用{{define "name"}}操作将呈现地址的模板分离出来,使其独立存在。您可以将其放在不同的模板文件中,并通过使用{{template "name"}}操作将其包含在当前位置,或者您可以将其保留在原始位置并使用新的{{block "name" pipeline}} T1 {{end}}操作(在Go 1.6中引入),它定义了模板并立即执行它。

2. 修改/创建处理程序

确保您有一个仅执行呈现Addressees的新模板的处理程序。执行Addressees模板的结果应直接发送到输出(w http.ResponseWriter)。

请注意,您可以使用一个处理程序来执行“完整”页面模板和仅Addressees模板(例如,基于URL参数决定),或者您可以拥有2个不同的处理程序,这真的取决于您。

3. 修改客户端

现在在客户端, 当你想要刷新/重新渲染收件人时,可以向处理程序发出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框架,类似地,在不进行完整页面重新加载的情况下更新Web页面的部分内容(尽管它不使用后端模板)。(披露:我是Gowut的作者。)

您可以在js.go文件中查看Gowut如何执行精确的Javascript代码(查找rerenderComp() Javascript函数)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接