1

まず第一に、計算されたオブザーバブルを使用できることを知っています。これらは複雑なプロパティには非常に優れていますが、IMO は、Silverlight にある IValueConverters に代わる価値のあるものではありません。私の現在のプロジェクトでは、複数の日付ピッカーがあります。今のところ、フォーマットを機能させたいので、日付ごとに追加の計算されたオブザーバブルを作成する必要があります。したがって、10 個のプロパティである 5 つの日付がある場合、Silverlight では 5 つの日付と 1 つのジェネリック dateconverter があります。

動作しますが、あまりきれいなコードではありません.これらの日付に検証を適用するときに発生する問題は言うまでもありません..

次のようなものがありますか:

<input type="text" data-bind="value: TestProperty" data-converter="MyTextConverter" />

または、これに代わるもので、二重のプロパティを作成できないものはありますか?

前もって感謝します、

アルネ・デルウェ

4

1 に答える 1

4

custom-bindingの主要な用途を見ています。良いガイドについては、ここを参照してください

ko.bindingHandlers.dateConverter = {
  init: function (element, valueAccessor, allBindingsAccessor) {
    var underlyingObservable = valueAccessor();
    var options = allBindingsAccessor().dateConverterOptions
                    || { /* set defaults here */ };

    var interceptor = ko.computed({
      read: function() {
        return underlyingObservable();
      },

      write: function(newValue) {
        var current = underlyingObservable(),
            convertedDate;

        /* do some kind of conversion here, using the 'options' object passed */

        if (convertedDate !== current) {
          underlyingObservable(convertedDate);
        }
        else if (newValue !== current.toString()) {
          underlyingObservable.valueHasMutated();
        }
      }
    });

      ko.applyBindingsToNode(element, { value: interceptor });
  }
};

ここから変更されたインターセプターコード

編集:

html は次のようになります。

<input type="text"
       data-bind="dateConverter: TestProperty,
                  dateConverterOptions: { format: 'dd/mm/yyyy', anotherOption: 'example' } " />
于 2012-10-01T10:46:33.310 に答える