0
我遇到了由具有可觀察屬性的對象組成的Knockout ObservableArray問題。我的視圖模型相當複雜,但我已經創建了下面的簡單測試來說明問題。knockout可觀察數組observablearray
我的問題是,當我更改ObservableArray中的某個對象中的某個observable屬性的值時,該值將更改爲ALL ALL中的對象。
我有一個部門viewModel有一個可觀察的該部門的員工數組。然後,我創建了5個對象personVM的實例,這些實例被推送到員工ObservableArray上。 personVM的每個實例都獲得唯一的firstName。
以下是加載它們的模型和代碼。
var theDepartmentVM = {
employees: ko.observableArray(),
departmentName: ko.observable()
};
var personVM= {
firstName: ko.observable()
}
$(document).ready(function(){
departmentVM.departmentName = "SomeDepartment";
for (i=1; i<=5; i++){
var person = Object.create(personVM);
personVM.firstName("EMP - " + i.toString());
departmentVM.employees.push(personVM);
}
ko.applyBindings(departmentVM);
});
這增加了五個名稱(EMP-1,EMPT-2等)。然後我用以下標記顯示名稱:
<div data-bind="foreach: employees">
<label data-bind="text: firstName"></label>
</div>
我的輸出是名稱「EMP-5」的五倍。它始終是我添加到數組中的最後一個值。
我認爲問題是我有五個personVM實例,但每個實例中的firstName對象都指向相同的observable。它是否正確?
我需要做什麼才能獲得理想的結果?
這就是答案。你能解釋爲什麼這個工作嗎?我的對象是否需要成爲函數才能使用'this'對象? – 2014-09-04 01:39:06
是的, 函數被稱爲「類」,您可以創建新的實例,並且在這些函數內,這指的是特定實例的屬性。如果你看看淘汰賽的主頁教程,那麼他們也是這樣做的。 – 2014-09-04 02:13:58