在更新变量golang时动态刷新模板的一部分

时间:2016-05-09 14:24:42

标签: javascript ajax templates go refresh

在Golang中,可以在更新变量时刷新模板的一部分吗? 这是我们可以在Angular.js中找到的东西。

基本上在我的代码中,我通过ajax中的邮政编码查找地址,这显示了我为此邮政编码找到的addr列表。

以下是模板的示例: enter image description here

目前,ajax调用GO例程。我不想在JS中获得结果,并根据ajax调用的结果构建html。

我希望,如果可能的话,只更新地址值(它是一个数组),因为我已经动态地构建了addr列表。

有任何线索吗?

1 个答案:

答案 0 :(得分:2)

模板引擎不支持这种开箱即用的功能。

所以你必须自己实现它。这并不难。以下是您应该遵循的步骤:

1。重构模板

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

2。修改/创建处理程序

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

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

3。修改客户端

现在在客户端想要刷新/重新呈现收件人时,对只执行并呈现收件人模板的处理程序进行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函数)。

相关问题