ここでは、データバインド要素を持つHTMLです:実装Knockout.js破壊的なforeachループ
div data-bind="foreach: clientRequests" id="test2">
<div class="list-group" >
<a href="#" class="list-group-item active"><b data-bind="text: client"></b></a>
<a href="#" class="list-group-item"><b>Priority: </b><b data-bind="text: client_priority"></b></a>
<a href="#" class="list-group-item"><b>Title: </b><b data-bind="text: title"></b></a>
<a href="#" class="list-group-item"><b>Description: </b><b data-bind="text: description"></b></a>
<a href="#" class="list-group-item"><b>Product Area: </b><b data-bind="text: product_area"></b></a>
<a href="#" class="list-group-item"><b>Target Date: </b><b data-bind="text: target_date"></b></a>
<a href="#" class="list-group-item"><b>Ticket URL: </b><b data-bind="text: ticket_url"></b></a>
</div>
</div>
これは私が配列foreach
ループにrequestsArray
と呼ば渡している方法です:
ko.cleanNode(document.getElementById('test2'));
ko.applyBindings({
clientRequests: requestsArray
}, document.getElementById('test2'));
さまざまなAJAX呼び出しで、異なるrequestArrayが返されます。たとえば、最初のページ・ロードの後、requestArrayの1つのインスタンスを受け取るAJAX呼び出しが行われます。これは10個の項目を持つことがあります。 foreachループは予想どおりに動作しているようで、配列内の10個の項目すべてがページに表示されます。次に、2回目のAJAX呼び出しが行われますが、今回は配列が5つしかない場合があります。何が起こるかは、各項目が2回繰り返され、合計10項目がページに表示されます。
問題がko.cleanNode(document.getElementById('test2'))
が前に呼び出されても、ということのようです:それぞれの新しい配列を
ko.applyBindings({
clientRequests: requestsArray
}, document.getElementById('test2'))
、各foreach
反復によって作成されたHTML要素の数は、それぞれの新しい配列に増加し続けます。 Vue.jsでは、新しい配列をデータバインディングとforループに渡すたびに、それは本質的に破壊的であり、以前の繰り返しから何も保持しません。
明らかに、このシナリオではここで働いて、私は私が何を考えてやるんが正しい手順である例があるin the docs知っているが、ボタンやself.array.remove(this)
を経由して、一度に1つのHTML要素はありませんko.cleanNode
使用し、配列foreach
の反復から作成されたすべてのhtml要素を完全にクリアするには、それをどのように適応させるべきかについてはあまりよく分かりません。
は、なぜあなたはあなたのモデルにあなたがアヤックス?Matt.kaaj @ 1 –
私はそれをやっているが、ポストに自分のコードを更新します呼び出すたびに、あなたの配列を空にしないでください。 Knockout.jsバインディングで何が起こっているのかは分かりません。配列そのものを更新することは問題ではありません。新しい配列ごとにforeachの繰り返しごとに作成されたhtml要素が発生しています。 – AdjunctProfessorFalcon