2014-02-18 86 views
0

我想用knockout js綁定更新ui。我能夠更新列表,但更改沒有反映在UI中。我收到以下錯誤:用knockout js綁定更新html元素

Uncaught Error: You cannot apply bindings multiple times to the same element. 

以下是我的代碼: 當我檢查數組的長度,警報顯示陣列被更新,但我想在UI也反映了變化。

<!DOCTYPE html> 
<html> 
<head> 
<script src="js/knockout-3.0.0.js"></script> 
<script> 

var Person = [ { 
    name : "qwe qwe", 
    number : 123123123 
}, { 
    name : "asd asd", 
    number : 999999999 
} ]; 

var myVM = function() { 
    this.persons = ko.observableArray(Person); 
} 

function init() { 
alert(Person.length); 
    ko.applyBindings(new myVM()); 
} 

function AddPerson() 
{ 
PushToArray(Person,"name","123"); 
init(); 
} 

function PushToArray(array, var1, var2) { 
    array.push({ 
     name : var1, 
     number : var2 
    }); 
} 
</script> 

</head> 
<body onload="init()"> 
      <div> 
       <button onclick="AddPerson()">Add</button>    
        <div data-bind="foreach:persons"> 
         <p data-bind="text:name"> </p> 
        </div>      
      </div>  
</body> 
</html> 
+2

你不需要調用ko.applyBindings(新myVM())當你添加一個人,它應該只做一次 – Cris

+0

謝謝你,你的建議工作 – mayurd

回答

0

ko.applyBindings()函數只能被調用一次。從那時起,對視圖模型中的可觀察對象所做的每一項更改都會自動反映在該人物中。

只需刪除調用init();功能您AddPerson()函數內部和從其他地方只有一次調用它,並且應該解決這個問題

+0

對不起,你不清楚,刪除init()後,你仍然必須從其他地方調用它,但只有一次。 –