2016-02-24 3 views
1

Я немного новичок в нокауте js. У меня есть кнопка, которая включена или отключена на основе наблюдаемой переменной. Похоже, что привязка работает, только если я использую ее с круглой скобкой.нокаут не работает без скобок

Кто-нибудь знает, почему это происходит? мое понимание, что мы должны быть в состоянии связать наблюдаемые переменные без скобок

self.noTaxResidencyChecked = ko.observable(false); 

//works fine 
<button data-bind="enable: !noTaxResidencyChecked()"></button> 

//doesn't work 
<button data-bind="enable: !noTaxResidencyChecked"></button> 

ответ

2

Это сводится к truthy (Ness) объекта. По умолчанию это работает в javascrpt. Когда вы используете '!' оператор стандартное сравнение javascript в

var x = ko.observable (null);

!! х // правда - наблюдаемая сама по себе является объектом, который оценивается как истина !! х() // ложь - теперь вы смотрите на объект внутри наблюдаемой, которая равна нулю, и оценивается как ложное

это то же самое, когда вы используете! оператор в разметке

// true if it evaluates to true 
<button data-bind="enable: !noTaxResidencyChecked()"></button> 

// true no matter what because the property is an observable object 
<button data-bind="enable: !noTaxResidencyChecked"></button> 

Что вы могли бы сделать

<button data-bind="disable: noTaxResidencyChecked"></button> 
// since you are not using a '!' knockout does its standard look into the object 

, но которые могут не соответствовать вашим потребностям

Смежные вопросы