Моя презумпция заключается в том, что «видимая» привязка KnockOutJs является двусторонней, поэтому, если я скрою элемент dom, связанный с свойством viewmodel, подписка на наблюдаемую будет обновляться. Мой образец в JsBin http://jsfiddle.net/zb6E9/20/ показывает, что если наблюдаемый изменяется, подписка срабатывает, но если элемент dom изменяется, подписка не срабатывает.KnockOutJs Visible Two-Way?
Мне что-то не хватает, но что делать, чтобы кнопка jQuery запускала подписку?
Html:
<input id="firstNameInput" data-bind="value: firstName, visible: isVisible" value="First" /><br />
<input data-bind="value: lastName" value="Last" /><br />
The name is <span data-bind="text: fullName"></span><br />
<input type="button" data-bind="click: changeVisibility" value="Change Visibility using KnockOut" /><br />
<input type="button" onclick="changeVisibilityJQuery()" value="Change Visibility Using jQuery" />
Javascript:
function changeVisibilityJQuery()
{
if($('#firstNameInput').is(':visible')){
$('#firstNameInput').hide();
} else {
$('#firstNameInput').show();
}
}
function AppViewModel() {
var self = this;
self.firstName = ko.observable('First');
self.lastName = ko.observable('Last');
self.isVisible = ko.observable(true);
self.changeVisibility = function(){
var v = self.isVisible() || false;
self.isVisible(!v);
};
self.isVisible.subscribe(function(bool) {
if (bool) {
// DO SOMETHING SUCH AS
self.firstName(self.firstName() + " " + bool);
}
});
self.fullName = ko.computed(function() {
return self.firstName() + " " + self.lastName();
});
}
ko.applyBindings(new AppViewModel());
Нет, привязка «видимого» только ** в одну сторону **: видимое связывание заставляет связанный элемент DOM скрываться или видиться в соответствии со значением, которое вы передаете привязке. – nemesv
Значит, это отличается от других наблюдаемых свойств knockoutjs, таких как текст, где обновление dom обновляет модель? – WillC
Да, большинство привязок односторонние, только некоторые из них двусторонние, как «значение» или «hasFocus», всегда описываются в документации, как работает данное связывание. – nemesv