我正在玩knockoutjs和他們的樣本,我被編輯過的原始碼位在下面。將fullName屬性指定爲dependentObservable,並且此方法明確知道fullName方法內的哪些依賴關係,因此fullName方法僅在依賴項更改時才起作用。ko.dependentObservable這個方法如何巧妙地理解依賴關係?
如果我從fullName方法中刪除this.LastName(),所以更改lastName屬性不會導致調用fullName方法。
我想知道這是怎麼回事。
var viewModel = {
firstName: ko.observable("Bert"),
lastName: ko.observable("Bertington")
};
viewModel.fullName = ko.dependentObservable(function() {
alert('worked');
return this.firstName() + " "+ this.lastName() ;
}, viewModel);
// Activates knockout.js
ko.applyBindings(viewModel);
我覺得這種行爲非常危險,因爲並不是所有的依賴關係都可以被評估。想想一個計算的布爾屬性,其計算結果類似於「return @ dependent1()|| @ dependent2()」。如果@ dependent1()在第一次評估中爲true,則KO無法知道計算出的屬性還應跟蹤@ dependent2更改。在我看來,應該有另一種更明確的方式來設置依賴關係。 – rosenfeld 2013-09-20 19:11:09