Javascript KnockoutJS:如何将可观察传递给定制绑定?
脚本:Javascript KnockoutJS:如何将可观察传递给定制绑定?,javascript,knockout.js,observable,Javascript,Knockout.js,Observable,脚本: 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, valueAc
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:
问题在于init
中的valueAccessor()
为空,但警报保持为它有值。如果我通过rangeslider:test()
(unwrapping observable),它可以正常工作,但我需要从init
更改该observable的值
那么,在没有通知更改的情况下,该值在何处丢失
-实例。您必须打开valueAccessor以获取observable的值:
length = ko.utils.unwrapObservable(valueAccessor()).length;
这里是最新的小提琴:WAT。。。为什么?oO不可拆卸可观察它只是ko.isObservable(值)?value():值。这只是为了确保你的工作对象,而不是功能。但是为什么会这样?我不明白为什么ko.utils.unwrapObservable(valueAccessor())可以工作,但是valueAccessor和valueAccessor()都不能工作?oo如果要将observable传递给绑定,那么要获取其值,应该将其展开,valueAccessor()只是返回该observable。谢谢,这解释了valueAccessor()返回正确值的原因。但仍然无法理解valueAccessor()是[],而不是函数observable(){//blahblah}(返回例如console.log(ko.observable(0)))啊,因为这是observableArray,而不是简单的observable。这是非常令人困惑的valueAccessor()函数类型。但我认为[]只是一个空数组
length = ko.utils.unwrapObservable(valueAccessor()).length;