Javscript:KnockoutJS: Как проходит наблюдение за пользовательской привязкой?
var asdasd = {
test: ko.observableArray([0, 50])
};
alert(asdasd.test()); //0,50
asdasd.test.subscribe(function() {
return alert("I was changed!!");
});
ko.bindingHandlers.rangeslider = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
var length;
length = valueAccessor().length; //0 =(
return alert("Why valueAccessor().length is " + length + " when it wasn't changed? =((");
}
};
ko.applyBindings(asdasd);
HTML:
<div data-bind="rangeslider: test"></div>
Проблема заключается в том, что valueAccessor()
внутри init
пусто, но тревога остается, что это имеет значение. Он отлично работает, если я прохожу rangeslider: test()
(невосприимчивый наблюдаемый), но мне нужно изменить значение наблюдаемого с init
.
Итак, где это значение потеряно без уведомления об этом?
http://jsfiddle.net/86sAP/3/ - живой пример.
WAT ... Почему? oO unwrapObservable это просто ko.isObservable (значение)? Значение(): значение. Это только для того, чтобы вы работали над своим объектом, а не с функцией. Но почему это работает? – Vladimirs
Не могу понять, почему ko.utils.unwrapObservable (valueAccessor()) просто работает, но ни valueAccessor, ни valueAccessor() не работает? oO – Vladimirs
Вы проходите наблюдение за привязкой, чтобы получить его значение, которое вы должны разворачивать, valueAccessor() просто возвращает это наблюдаемое. –