2015-05-26 70 views
0

單擊按鈕不止一次會複製UI中的數據。KnockoutJS在第二次綁定後在UI中複製數據

我期待什麼的每次點擊:* Name1 * Name2

但是:* Name1 * Name1 * Name2 * Name2

<html> 
 
<head> 
 
    <script src="http://knockoutjs.com/downloads/knockout-3.3.0.js" type="text/javascript"></script> 
 
</head> 
 
<body> 
 
    <div id="myDiv"> 
 
    <div data-bind="foreach: Data"> 
 
     * <span data-bind="text: Name"></span> 
 
    </div> 
 
    </div> 
 
    <button onclick="f1()">Click Me!</button> 
 
    <script type="text/javascript"> 
 
    function myViewModel(data){ 
 
     var self = this; 
 
     self.Data = data; 
 
    }  
 
    function f1() { 
 
     var d = [{ "Name": "Name1" }, { "Name": "Name2" }]; 
 
     ko.cleanNode(document.getElementById('myDiv')); 
 
     ko.applyBindings(new myViewModel(d), document.getElementById('myDiv')); 
 
     return false; 
 
    } 
 
    </script> 
 
</body> 
 
</html>

+2

ko.cleanNode不會刪除已添加的DOM元素(請參閱https://github.com/knockout/knockout/issues/912)。因此,在第一次點擊HTML後,您的HTML將如下所示:'

*Name1*Name2
',因此再次點擊該按鈕將重複上一次運行中已插入的節點。所以只是不要使用ko.cleanNode,因爲這不是你要做的除外:http://stackoverflow.com/questions/15063794/can-cleannode-be-used-to-clean-binding – nemesv

+1

@nemesv好評,我認爲這也值得回答。 – Jeroen

+0

理想情況下,您應該更新視圖模型屬性,而不是刪除並重新創建綁定。如果你仍然想這樣做,爲什麼不移除'#myDiv' DOM元素,從頭創建並綁定新模型。您可以將HTML保存在'

相關問題