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;