2

ノックアウト js で ff に括弧を使用していることは承知しています。

または、次のような特定のプロパティを持つオブジェクト person がある場合: * person().firstname * person().age (一番右のプロパティには括弧は必要ありません)

今、私はこの種の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>

したがって、基本的には、チェックボックスがチェックされているかどうかに応じて、fadeVisibleバインディングを含むdivの表示/非表示が切り替えられます。括弧を削除しようとする<div data-bind="fadeVisible: displayGuitars(), fadeDuration: 250">と、突然fadeVisibleが機能しなくなり、チェック時にdivが表示/非表示になりません/チェックボックスをオフにします。私の質問は、fadeVisible バインディングを使用して div に括弧が必要な理由と、上記の基準のいずれかに該当する場合、それはどれですか?

閣下/奥様、あなたの答えは大変役に立ちます。ありがとう++

4

1 に答える 1

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代わりに使用できます。

これは、括弧なしでそれを示すフィドルです。ところで、将来、問題を示すためにこのようなコードがある場合は、独自のフィドルをまとめて、人々が問題をすばやく確認できるようにするのに役立ちます。

于 2013-08-05T15:39:54.263 に答える