2016-03-14 2 views
-1

У меня есть наблюдаемаяизменение значения наблюдаемой на 1 и 0 OnClick Нокаут JS

self.oneOrZero = ko.observable(0); 

Я хочу, чтобы изменить значение этой наблюдаемой на 1 или 0, нажав только одну кнопку.

<button data-bind="onclick : " > Change </button> 
+2

Нокаут имеет встроенный обработчик называемый щелчок. Затем попробуйте что-то вроде 'self.toggle = function() {self.oneOrZero (self.oneOrZero()? 0: 1)}' Ex: 'data-bind =" click: toggle "' – Neps

+0

Возможный дубликат [Передача параметра с использованием onclick или привязка клика с помощью KnockoutJS] (http://stackoverflow.com/questions/10039297/passing-parameter-using-onclick-or-a-click-binding-with-knockoutjs) – Jeroen

ответ

2

Вы можете использовать оператора мод для переключения с 0 на 1 и наоборот. использование нажмите связывание, так как OnClick не распознается нокаута

self.oneOrZero = ko.observable(0); 
self.toggle = function() { 
    self.oneOrZero((self.oneOrZero() + 1) % 2); 
} 

<button data-bind="click : toggle" > Change </button> 
+0

Хороший ответ, но разве это не бит overkill для использования оператора '%'? Почему бы не просто «self.oneOrZero (self.oneOrZero()? 0: 1);' (как и прокомментировал Непс передо мной) –

+0

Хм, да, возможно. С точки зрения стоимости я не знаю, какой из них более эффективен: преобразование типа или оператор mod. Что касается кода, для меня более естественно использовать мод, поскольку мы имеем дело с числами, а не с булевыми ... но я думаю, что это более важная проблема. Возможно, Boolean (self.oneOrZero())? 0: 1 или self.oneOrZero() === 1? 0: 1. Javacript действительно гибкий при конверсиях, но я всегда предпочитаю избегать этого. – jparaya

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