2013-08-15 29 views
9

Got ViewModel đơn giản:KnockOut chạy chức năng trên giá trị thay đổi

function viewModel() { 
    enabled: ko.observable(false); 
    ... 
} 

và một số ràng buộc như:

<input data-bind="hasFocus: enabled" /> 

và tôi muốn chạy một số chức năng trên tập trung, và khác trên tập trung bị mất (hoặc enabled = true/false) nhưng chạy khi thay đổi giá trị. Bất kỳ trợ giúp nào?

Trả lời

14

Bạn có thể đăng ký vào chức năng kích hoạt của bạn, chẳng hạn như:

enabled.subscribe(function(newValue) { 
    if(newValue) { // Has focus 

    } else { 
     // No focus 
    } 
}); 
0

Thông thường, một giải pháp tốt là để đăng ký quan sát của bạn và xử lý logic của bạn có như:

enabled.subscribe(function(newValue) { 
    if (newValue) { 
     //do something if it is true 
    } 
    else { 
     //do something if false 
    } 
}); 
+3

Nghĩa đen câu trả lời chính xác như nhau, nhưng với ý kiến ​​khác nhau ! :) –

2

sự kiện: { mouseover: enableDetails, mouseout: disableDetails}

Hãy thử điều này:

<input data-bind="hasFocus: enabled, event: { focus: onFocus, blur: onBlur}" /> 

nếu bạn muốn theo dõi sự thay đổi giá trị mà bạn nên làm điều đó trong viewmodel:

this.enabled.subscribe(function(newValue){ 
    //use newValue 
}); 

Lưu ý: bạn có lỗi cú pháp trong viewmodel:

enabled: ko.observable(false); <-- 
Các vấn đề liên quan