ホームページ >バックエンド開発 >Golang >Go でテンプレートの部分を動的に更新するにはどうすればよいですか?

Go でテンプレートの部分を動的に更新するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-24 10:52:15520ブラウズ

How to Dynamically Update Template Partials in Go?

Go でテンプレートの部分を動的に更新する

Go では、変数が変更されたときにテンプレートの一部を更新する機能は本質的にはありません。サポートされました。この機能を実現するには、カスタム ソリューションを実装する必要があります。

実装手順:

  1. リファクタリング テンプレート: {{define "Addresses"}} または {{block を使用して、別のテンプレート ブロックにアドレスを追加します。 "Addresses"}}.
  2. ハンドラーの変更/作成: Addresses テンプレートを排他的に実行し、出力を HTTP 応答に送信するハンドラーを作成します。このハンドラーは、独立して使用することも、フル ページ テンプレートのハンドラー内で使用することもできます。
  3. クライアント側ロジック: クライアント側では、必要なときに Addresses ハンドラーへの AJAX 呼び出しを実行します。表示されているアドレスを更新します。 Addresses ラッパー要素のコンテンツを AJAX 呼び出しからの応答に置き換えます。

詳細な手順:

  1. テンプレートリファクタリング:

    {{define "Addresses"}}
      <ul>
      {{range $key, $value := .Addresses}}
     <li>{{ $key }}: {{ $value }}</li>
      {{end}}
      </ul>
    {{end}}
  2. ハンドラーの変更:

    import "net/http"
    
    func AddressesHandler(w http.ResponseWriter, r *http.Request) {
      data := map[string]string{"Addresses": []string{"Address1", "Address2"}}
      t, err := template.New("AddressesTemplate").Parse("{{define "Addresses"}}{{.Addresses}}{{end}}")
      if err != nil {
     http.Error(w, http.StatusInternalServerError.String(), http.StatusInternalServerError)
     return
      }
      err = t.ExecuteTemplate(w, "Addresses", data)
      if err != nil {
     http.Error(w, http.StatusInternalServerError.String(), http.StatusInternalServerError)
     return
      }
    }
  3. クライアント側実装:

    var addressesElement = document.getElementById("addresses");
    
    function refreshAddresses() {
      var xhr = new XMLHttpRequest();
      xhr.open("GET", "/addresses", true);
      xhr.onreadystatechange = function() {
     if (xhr.readyState === 4 && xhr.status === 200) {
       addressesElement.outerHTML = xhr.responseText;
     }
      };
      xhr.send();
    }

代替フレームワーク:

Gowut は、動的部分更新に同様の機能を提供する Go Web フレームワークです。ウェブページ。

以上がGo でテンプレートの部分を動的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。