如何在绑定设置为新值之前获取knockout旧值?

时间:2014-10-30 17:18:16

标签: javascript knockout.js

我正在进行自定义绑定以显示分数:

我喜欢这样的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(&#34; 10&#34;)

然后我将值更新为self.ScoreValue(&#34; 15&#34;)

然后我要显示$("#divarrow").show();

如果我将值更新为self.ScoreValue(&#34; 5&#34;)

然后我想隐藏$("#divarrow").hide();

1 个答案:

答案 0 :(得分:2)

您可以使用beforeChange订阅创建另一个具有上一个分数的字段(例如PreviousScoreValue):

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();
        }
    }
},