[英]Javascript & knockoutjs: how to refactor the following code to be able to access the properties outside the function
我正在努力寻找一种方法来获取 function 之外可用的属性 Override & Justification。 代码是:
self.CasOverridesViewModel = ko.observable(self.CasOverridesViewModel);
var hasOverrides = typeof self.CasOverridesViewModel === typeof(Function);
if (hasOverrides) {
self.setupOverrides = function() {
var extendViewModel = function(obj, extend) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
extend(obj[property]);
}
}
};
extendViewModel(self.CasOverridesViewModel(), function(item) {
item.isOverrideFilledIn = ko.computed( function() {
var result = false;
if (!!item.Override()) {
result = true;
}
return result;
});
if (item) {
item.isJustificationMissing = ko.computed(function() {
var override = item.Override();
var result = false;
if (!!override) {
result = !item.hasAtleastNineWords();
}
return result;
});
item.hasAtleastNineWords = ko.computed(function() {
var justification = item.Justification(),
moreThanNineWords = false;
if (justification != null) {
moreThanNineWords = justification.trim().split(/\s+/).length > 9;
}
return moreThanNineWords;
});
item.isValid = ko.computed(function() {
return (!item.isJustificationMissing());
});
}
});
}();
}
我已经通过设置一个全局变量来尝试它:
var item;
or
var obj;
if(hasOverrides) {...
因此,最让我无法理解的是如何在底层 model CasOverridesviewModel 之间建立连接。 正如我假设 self.CasOverridesViewModel.Override() 将能够获取写入屏幕上的数据。
我做的另一个尝试是 var override = ko.observable(self.CasOverridesViewModel.Override()),这导致了 js typeError,因为您无法从未定义的 object 中读取。
因此,如果有人能够就如何从 function 之外的可用输入字段中获取字段提供一些指导。 将不胜感激。 如果我需要澄清某些方面,请不要犹豫。
致以最诚挚的谢意!
不知道你想用你的变量在 go 之外多远,但是如果你只是在根级别定义你的全局变量,但只是在你的内部变量获得值时才添加到它,你不会得到设置未定义的错误。
var root = { override: ko.observable() }; root.override.subscribe((val) => console.log(val)); var ViewModel = function () { var self = this; self.override = ko.observable(); self.override.subscribe((val) => root.override(val)); self.load = function () { self.override(true); }; self.load(); }; ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.