2013-11-22 52 views
0

我想弄清楚爲什麼當複選框更改時文本輸入字段不活動?敲除js可觀察數組和複選框,檢查綁定失敗

<form data-bind="foreach: editables"> 
    <input type="checkbox" name="edit" data-bind=" checked: active" /> 
    <input type="text" name="edit" data-bind="value: name, disable: !active" /> 
    <br/> 
</form> 

var viewModel = function() { 
    this.editables = ko.observableArray(
[{ 
    active: true, 
    name: "mi" 
}, { 
    active: false, 
    name: "yo" 
}, { 
    active: true, 
    name: "cel" 
}]); 
}; 

ko.applyBindings(new viewModel()); 

http://jsfiddle.net/legolito/2FAJN/2/

我希望有人能helpme。 (英語不是我的母語,所以我很抱歉如果我的語法不好)

回答

0

您是否考慮過使用active屬性observable

http://jsfiddle.net/tzG3t/

var viewModel = function() { 
    this.editables = ko.observableArray(
    [{ 
     active: ko.observable(true), 
     name: "mi" 
    }, { 
     active: ko.observable(false), 
     name: "yo" 
    }, { 
     active: ko.observable(true), 
     name: "cel" 
    }]); 
}; 

ko.applyBindings(new viewModel()); 
0

那是因爲你沒有在ko.observableArray使用ko.observable

查看observableArrays

關鍵點的knockout documentation:一個observableArray軌道哪些對象數組中,不是那些對象的狀態

只需將一個對象放入一個observableArray中就不會使對象的所有屬性都可以被觀察到。當然,如果你願意,你可以使這些屬性可觀察,但這是一個獨立的選擇。 observableArray只跟蹤它保存的對象,並在添加或刪除對象時通知監聽器。

因此,讓它可觀察並解決問題。
小提琴:http://jsfiddle.net/2FAJN/4/