gpt4 book ai didi

knockout-2.0 - 淘汰赛2.2.0,在更改之前订阅获取值和新值

转载 作者:行者123 更新时间:2023-12-03 13:25:12 26 4
gpt4 key购买 nike

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

当我调用Knockout的subscription方法时,是否可以同时获取以前的值和新的值?现在,我只能单独调用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);

最佳答案

我更喜欢使用observable extender

http://jsfiddle.net/neonms92/xybGG/

扩展器:

ko.extenders.withPrevious = function (target) {
// Define new properties for previous value and whether it's changed
target.previous = ko.observable();
target.changed = ko.computed(function () { return target() !== target.previous(); });

// Subscribe to observable to update previous, before change.
target.subscribe(function (v) {
target.previous(v);
}, null, 'beforeChange');

// Return modified observable
return target;
}


用法示例:

// Define observable using 'withPrevious' extension
self.hours = ko.observable().extend({ withPrevious: 1 });

// Subscribe to observable like normal
self.hours.subscribe(function () {
if (!self.hours.changed()) return; // Cancel if value hasn't changed
print('Hours changed from ' + self.hours.previous() + ' to ' + self.hours());
});

关于knockout-2.0 - 淘汰赛2.2.0,在更改之前订阅获取值和新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com