Javascript 何时在knockoutJS中使用括号?

Javascript 何时在knockoutJS中使用括号?,javascript,data-binding,knockout.js,knockout-2.0,Javascript,Data Binding,Knockout.js,Knockout 2.0,我知道您在knockoutjs中为ff使用了paranthesis: *代码中可观测函数的解包裹 *深入研究具有声明性绑定的对象 或者,当您有一个具有特定属性的对象人,例如: *person().firstname *人年龄 (最右边的属性不需要括号) 现在我有了这种html/js: <section> <label> <input data-bind="checked: displayGuitars" type="checkbox" /

我知道您在knockoutjs中为ff使用了paranthesis: *代码中可观测函数的解包裹 *深入研究具有声明性绑定的对象

或者,当您有一个具有特定属性的对象人,例如: *person().firstname *人年龄 (最右边的属性不需要括号)

现在我有了这种html/js:

<section>
      <label>
        <input data-bind="checked: displayGuitars" type="checkbox" />
         Display Guitars
      </label>
      <div data-bind="fadeVisible: displayGuitars(), fadeDuration: 250">
        <ul data-bind="foreach: products">
          <li>
            <span data-bind="text: model"></span>
          </li>
        </ul>
      </div>
      <div data-bind="dump: $data, enable: false"></div>
    </section>
<script>



  ..................................some code

   ko.bindingHandlers.fadeVisible = {
    init: function (element, valueAccessor) {
        // Start visible/invisible according to initial value
        var shouldDisplay = valueAccessor();
        $(element).toggle(shouldDisplay);
    },
    update: function (element, valueAccessor, allBindingsAccessor) {
        // On update, fade in/out
        var shouldDisplay = valueAccessor(),
            allBindings = allBindingsAccessor(),
            duration = allBindings.fadeDuration || 500; // 500ms is default duration unless otherwise specified

        shouldDisplay ? $(element).fadeIn(duration) 
            : $(element).fadeOut(duration);
    }
};


var vm = (function () {

    var data = mockdata.getProducts();
    var products = ko.observableArray(data);
    var displayGuitars = ko.observable(false);

    var vm = {
      displayGuitars: displayGuitars,
      products: products
    };

    return vm;
})();

ko.applyBindings(vm);
</script>

展示吉他
一些代码 ko.bindingHandlers.fadeVisible={ init:函数(元素、值访问器){ //根据初始值启动可见/不可见 var shouldDisplay=valueAccessor(); $(元素).切换(应显示); }, 更新:函数(元素、valueAccessor、allBindingsAccessor){ //更新时,淡入/淡出 var shouldDisplay=valueAccessor(), allBindings=allBindingsAccessor(), duration=allBindings.fadeDuration | | 500;//500ms为默认持续时间,除非另有规定 是否应显示?$(元素).fadeIn(持续时间) :$(元素)。淡出(持续时间); } }; var vm=(函数(){ var data=mockdata.getProducts(); var产品=可观测的ko(数据); var displayGuitars=ko.可观察(假); var vm={ 显示吉他:显示吉他, 产品:产品 }; 返回虚拟机; })(); ko.应用绑定(vm);
因此,基本上它所做的是,带有fadeVisible绑定的div被切换为show/hide(显示/隐藏),这取决于复选框是否选中,我尝试删除
中的括号,然后fadeVisible突然停止工作,当我选中/取消选中复选框时,div不再显示/隐藏。我的问题是,为什么我需要div中带有fadeVisible绑定的括号,如果它符合我上面提到的任何标准,那么它是哪一个


先生/女士,您的回答将大有帮助。谢谢++

您的问题是在自定义绑定中没有对您的
值访问器进行
展开
调用。应该是这样的

init: function (element, valueAccessor) {
        // Start visible/invisible according to initial value
        var shouldDisplay = ko.unwrap(valueAccessor());
        $(element).toggle(shouldDisplay);
    },
如果您有一个较旧的版本,那么它将在Knockout2.3中工作,而不是使用它的
ko.utils.unwrapObservable

这是在没有帕伦夫妇的情况下进行的演示。顺便说一句,在将来,当你有这样的代码来演示这个问题时,它有助于把你自己的一把小提琴放在一起,这样人们就可以快速地看到这个问题