2013-08-05 37 views
2

我知道您使用paranthesis在knockoutjs爲FF: *代碼Unrapping觀察到的功能 *潛水與聲明對象結合何時在knockoutJS中使用括號?

,或者當你有一個對象的人與前某些屬性: * 。人()姓 *人() 年齡(最右邊的屬性不需要括號)

現在我有這樣的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> 

所以基本上它做的是div與fadeVisible綁定切換顯示/隱藏取決於是否選中複選框,我試圖刪除<div data-bind="fadeVisible: displayGuitars(), fadeDuration: 250">括號,然後突然fadeVisible停止工作,該div不再顯示/隱藏時我選中/取消選中複選框。我的問題是爲什麼我需要在div中使用fadeVisible綁定的括號,並且如果它確實落在我上面提到的那個標準中的哪一個上?

先生/女士,你的回答會有很大的幫助。謝謝++

回答

3

你的問題是你沒有unwrap呼籲您的valueAccessor在自定義綁定。它應該是這樣的

init: function (element, valueAccessor) { 
     // Start visible/invisible according to initial value 
     var shouldDisplay = ko.unwrap(valueAccessor()); 
     $(element).toggle(shouldDisplay); 
    }, 

這將在Knockout2.3工作,如果你有一箇舊版本的ko.utils.unwrapObservable代替。

這是a fiddle沒有parens展示它。順帶一提,在將來,當你有這樣的代碼來演示這個問題時,它可以幫助你將自己的小提琴放在一起,以便人們可以快速查看問題。

+0

指出,謝謝:D –

相關問題