3

ノックアウトをhtml select / optionと組み合わせて使用​​ しています(Fiddleを参照):

<select data-bind="value: Width">
    <option>10</option>
    <option>100</option>
</select>

このオプションを呼び出すとapplyBindings、文字列として扱われます。これは望ましくない影響につながります。次のサンプルを検討してください。

function AreaViewModel() {
    var self = this;

    self.Width = ko.observable(10);
    self.Height = ko.observable(10);

    self.Area = ko.computed(function () {
        return self.Width() * self.Height();
    });
}

$(document).ready(function () {
    var viewModel = new AreaViewModel();

    ko.applyBindings(viewModel);
});

applyBindings呼び出されると、self.Width初期self.Height値 10 から "10" に型キャストされます。これにより、計算された関数が再評価されます。

ここでは大したことではないようですが、より複雑なソリューションでは、このプロパティが変更されると複数の AJAX 呼び出しが発生する PageSize プロパティ (ページあたり 100 / 500 / 1000 行) があります。

この問題を克服するために、どの (空想的な) 解決策がありますか?

4

2 に答える 2

2

次のようなものを試すことができます

self.Width = ko.observable(10);
self.Width.subscribe(function(newValue){
   if(typeof newValue === "string"){
       self.Width(parseInt(newValue));
   }
});
于 2013-04-17T12:32:32.433 に答える
1

計算された幅を作成し、独自の「書き込み」および「読み取り」オプションを次のように書き込むことができます。

var _width = ko.observable(10);
self.Width = ko.computed({
  read : function(){
     return _width;
  },
  write: function(value){
     if(typeof value === "string"){
        _width(parseInt(value));
     }
  }
于 2013-04-17T13:08:30.870 に答える