2014-10-30 64 views
0

我做自定義綁定來顯示比分:如何在綁定設置爲新值之前獲得敲除舊值?

我的html喜歡這樣

<div class="notesite" id="note_1" data-bind="Score: ScoreValue()"></div> 

self.ScoreValue= ko.observable(""); 

結合是這樣的:

ko.bindingHandlers.Score = { 
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
     var myscorevalue = valueAccessor(); 
     if (myscorevalue) { 

      //if(myscorevalue is decrease) 
      { 
       $("#divarrow").hide(); 
      } 
      //if(myscorevalue is increasing) 
      { 
       $("#divarrow").show(); 
      } 
     } 
    }, 
    update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) { 
     var myscorevalue = valueAccessor(); 
     if (myscorevalue) { 

      //if(myscorevalue is decrease) 
      { 
       $("#divarrow").hide(); 
      } 
      //if(myscorevalue is increasing) 
      { 
       $("#divarrow").show(); 
      } 
     } 
    } 
}; 

我的問題是,根據分數我過去了,我想顯示上下箭頭!

讓我們看看我的價值= self.ScoreValue( 「10」)

,然後我更新的值self.ScoreValue( 「15」)

的話,我想顯示$("#divarrow").show();

如果我更新的值self.ScoreValue(「5」)

然後我想隱藏$("#divarrow").hide();

回答

1

您可以創建另一個字段(例如:PreviousScoreValue),將有使用beforeChange訂閱以前的成績:

self.PreviousScoreValue = ko.observable(self.ScoreValue()); 

self.ScoreValue.subscribe(function(value) { 
    self.PreviousScoreValue(value); 
}, null, 'beforeChange'); 

然後在自定義綁定,用它來比較新ScoreValue

init: function (element, valueAccessor, allBindingsAccessor, viewModel, 
       bindingContext) { 
    var myscorevalue = valueAccessor(); 
    var previousvalue = bindingContext.$data.PreviousScoreValue(); 

    if (myscorevalue) { 
     if(myscorevalue < previousvalue) 
     { 
      $("#divarrow").hide(); 
     } else if(myscorevalue > previousvalue) 
     { 
      $("#divarrow").show(); 
     } 
    } 
},