Knockout.js KnockoutJS-如何从计算的可观察对象中排除可观察对象
我有一个计算的observable,它使用ko.toJS()从视图模型中发布值(内部observable)。其中一个内部观察值绑定到一个文本框。如何防止对文本框的更改自动触发计算的可观测值(即回发)Knockout.js KnockoutJS-如何从计算的可观察对象中排除可观察对象,knockout.js,Knockout.js,我有一个计算的observable,它使用ko.toJS()从视图模型中发布值(内部observable)。其中一个内部观察值绑定到一个文本框。如何防止对文本框的更改自动触发计算的可观测值(即回发) Knockout 2.2+包括一个peek功能,无需订阅即可访问可观察对象。因此,您可以执行以下操作: ko.computed(function () { var s = self.SearchParams; NS.post({ url: '/SomeUrl',
Knockout 2.2+包括一个
peek
功能,无需订阅即可访问可观察对象。因此,您可以执行以下操作:
ko.computed(function () {
var s = self.SearchParams;
NS.post({
url: '/SomeUrl',
data: {
OrderStatusID: s.OrderStatusID(),
OrderNumber: s.OrderNumber.peek(),
OrderBy: s.OrderBy(),
OrderByDirection: s.OrderByDirection(),
PageIndex: s.PageIndex(),
PageSize: s.PageSize()
}
});
}).extend({ throttle: 1 });
如果您仍停留在淘汰2.1.0上,您可以手动扩展observables以添加peek
,如下所示(感谢Ryan Niemeyer):
然后使用backdoorObservable
查看OrderNumber
:
OrderNumber: backdoorObservable()
我写了这个小插件来帮助我解决很多类似的问题: 要忽略某些字段,它为您提供了
隐藏
选项,您可以这样使用:
ko.watch(SearchParams, { hide: [SearchParams.OrderNumber] }, function () {
NS.post({
url: '/SomeUrl',
data: ko.toJS(SearchParams)
});
}).extend({ throttle: 1 });
几个问题:请求中是否需要发送OrderNumber?它是否需要是可观察的(您可以将一个不可观察的对象绑定到一个输入,它将写入该属性,它只是不会通知任何人,比如您的计算机)?OrderNumber确实需要在请求中发送。我假设它需要是可观察的,以便将其绑定到输入。如果是不可观察的,我可以看到会发生什么。是的,如果你的情况不太复杂(其他事情取决于
OrderNumber
),那么你应该没事。这确实解决了依赖性问题。但是我有一个reset()函数来清除OrderNumber,它现在不会更新文本框。所以,我想我还是希望它是可观察的。一旦在计算中,我可以检查哪些观测触发了计算吗?
OrderNumber: backdoorObservable()
ko.watch(SearchParams, { hide: [SearchParams.OrderNumber] }, function () {
NS.post({
url: '/SomeUrl',
data: ko.toJS(SearchParams)
});
}).extend({ throttle: 1 });