Javascript 映射后应用敲除扩展程序
我遇到了一个问题,在创建了可观察对象之后,向其添加一个淘汰扩展程序。在下面的示例中,每当值按预期更改时,扩展器都会在Javascript 映射后应用敲除扩展程序,javascript,knockout.js,Javascript,Knockout.js,我遇到了一个问题,在创建了可观察对象之后,向其添加一个淘汰扩展程序。在下面的示例中,每当值按预期更改时,扩展器都会在foo上运行,但对于bar,仅在第一次调用时运行一次 var viewModel = function(){ var self = this; self.foo = ko.observable(1).extend({ numeric: 1 }); self.bar = ko.observable(1); self.bar.extend({ nu
foo
上运行,但对于bar
,仅在第一次调用时运行一次
var viewModel = function(){
var self = this;
self.foo = ko.observable(1).extend({ numeric: 1 });
self.bar = ko.observable(1);
self.bar.extend({ numeric: 1 });
};
实际上,我正在映射一个大型JSON对象,并希望在映射到某些属性之后添加扩展程序。有没有一个简单的方法可以做到这一点
下面是一个显示问题的JSFIDLE:
您遇到的问题是,扩展器正在创建一个新的可观察对象(基于它扩展的可观察对象)。而新的observable并没有在您对
extend
的第二次调用中使用
要解决此问题(不更改扩展器的代码),您可以将调用extend
的响应分配到它所调用的相同属性中
换句话说,在最后一行前面添加self.bar=
,以便:
self.bar = self.bar.extend({ numeric: 1 });
此解决方案不会对子观测值的模板重新渲染作出反应。试试这个活生生的例子2.我不知道你的意思。OP和我将我们的代码基于发布在文档页面上的相同
ko.extenders.numeric
。如果你的方法与我的方法有很大不同,请发布一个新的答案。也许我误解了一些东西,但这并没有如预期的那样起作用,检查一下哦,我现在明白你的意思了。但是我认为对于这个特定的问题,numeric
extender即使在映射之后应用也能很好地工作:。我还认为我找到了required
扩展器的解决方案:(再次调用applyBindings
)再次调用applyBindings
将为已经绑定的元素抛出异常。顺便说一句,谢谢:)