首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Knockout-2.2.0,订阅更改前获取值和新值

Knockout-2.2.0,订阅更改前获取值和新值
EN

Stack Overflow用户
提问于 2012-12-29 07:00:57
回答 1查看 13.7K关注 0票数 18

jsfiddle链接:http://jsfiddle.net/T8ee7/

当我调用Knockout的subscribe方法时,有没有一种方法可以同时获得以前的值和新值?现在,我只能分别调用get这些值。如果旧值和新值不同,我想触发一些代码。

我想我可以做以下事情,但它可能会变得混乱...(http://jsfiddle.net/MV3fN/)

var sv = sv || {};
sv.PagedRequest = function (pageNumber, pageSize) {
    this.pageNumber = ko.observable(pageNumber || 1);
    this.numberOfPages = ko.observable(1);
    this.pageSize = ko.observable(pageSize || sv.DefaultPageSize);
};


var _pagedRequest = new sv.PagedRequest();
var oldValue;
_pagedRequest.pageNumber.subscribe(function (previousValue) {
    console.log("old: " + previousValue);
    oldValue = previousValue;
}, _pagedRequest, "beforeChange");


_pagedRequest.pageNumber.subscribe(function (newValue) {

    console.log("new: " + newValue);
    if (oldValue != newValue) {
        console.log("value changed!");
    }

});

_pagedRequest.pageNumber(10);
_pagedRequest.pageNumber(20);
​
EN

回答 1

Stack Overflow用户

发布于 2013-03-02 12:13:06

http://jsfiddle.net/MV3fN/3/

var sv = sv || {};
sv.PagedRequest = function (pageNumber, pageSize) {
    var self = this;
    self.pageNumber = ko.observable(pageNumber || 1);
    self.numberOfPages = ko.observable(1);
    self.pageSize = ko.observable(pageSize || sv.DefaultPageSize);

    self.pageNumber.subscribe(function (previousValue) {
        console.log(previousValue);
        console.log(self.pageNumber.arguments[0]);
        if (previousValue != _pagedRequest.pageNumber.arguments[0]) {
            console.log('value changed');
        } 
        else {
            //This won't get executed because KO doesn't
            //call the function if the value doesn't change
            console.log('not changed');
        }
    }, _pagedRequest, "beforeChange");
};

var _pagedRequest = new sv.PagedRequest();

_pagedRequest.pageNumber(10);
_pagedRequest.pageNumber(20);
_pagedRequest.pageNumber(20);
_pagedRequest.pageNumber(5);

我不知道你是否真的应该使用arguments[0],但它似乎起作用了。

您还可以设置自己的方法来以一种更简洁的方式完成此任务:

http://jsfiddle.net/PXKgr/2/

...
    self.setPageNumber = function(page) {
        console.log(self.pageNumber());
        console.log(page);
        if (self.pageNumber() != page) {
            console.log('value changed');
        }
        else {
            console.log('not changed');
        }
        self.pageNumber(page);
    };
...
_pagedRequest.setPageNumber(10);
_pagedRequest.setPageNumber(20);
_pagedRequest.setPageNumber(20);
_pagedRequest.setPageNumber(5);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14076865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档