【问题标题】:Dynamically refresh a part of the template when a variable is updated golang更新变量时动态刷新模板的一部分golang
【发布时间】:2016-09-04 05:40:41
【问题描述】:

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

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

这是一个模板示例:

此时,ajax 调用一个 GO 例程。我不想在 JS 中获取结果并从 ajax 调用的结果构建 html。

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

有什么线索吗?

【问题讨论】:

    标签: javascript ajax templates go refresh


    【解决方案1】:

    模板引擎不支持这种现成的。

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

    1。重构您的模板

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

    2。修改/创建处理程序

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

    请注意,您可以使用 1 个处理程序来执行“完整”页面模板和仅执行地址模板(例如根据 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 函数)。

    【讨论】:

      猜你喜欢
      • 2022-11-08
      • 1970-01-01
      • 2013-03-19
      • 2021-12-12
      • 2020-12-04
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多