2014-10-30 68 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(); 
     } 
    } 
},