挖空扩展可观察 取消引用时返回未定义
Knockout Extended Observable returning undefined when dereferenced?
我在Javascript中有一个"对象",它创建了一个扩展的可观察量,Location等。
当我尝试用值填充项目时,似乎只有 Internet Explorer 11 中会抛出一个错误,指出它是"无法使用未定义或空引用的属性'Address1'"。
奇怪的是,当我进入控制台并输入"self"时,它将位置显示为可观察量。 如果我输入"自我。位置",它显示了可观察量的功能。 如果键入"自我。位置()",它说未定义。 几乎所有其他事情似乎都还可以。 我包含两个可观察量的代码。 一个(位置)导致问题。 另一个是参与者,在代码中看起来很相似,但"观察"得很好。
self.Participants = ko.observableArray([]).extend({
validation: [{
validator: function (value) {
if ((showConfig && showConfig.CreateWorkOrder) || (showConfig && showConfig.WorkOrderNumber) || (showConfig && showConfig.WorkOrderId)) {
self.ModelErrors({ sort: 7, element: "participants-container", error: "", clear: true });
return true;
}
var HasGroupRoute = self.GroupRoute() != "g0";
if (HasGroupRoute) {
self.ModelErrors({ sort: 7, element: "participants-container", error: "", clear: true });
return true;
}
if ((!value || value.length <= 0) || HasGroupRoute) {
//$("#participants-container").addClass('sp-error');
//$("#divErrMsgBlock").show();
//addressError.push("<li style='text-align: left; list-style-type: square'>You must select a participant.</li>");
self.ModelErrors({ sort: 7, element: "participants-container", error: "<li style='text-align: left; list-style-type: square'>You must select a participant.</li>" });
return false;
}
else {
//$("#participants-container").removeClass('sp-error');
//$("#divErrMsgBlock").hide();
self.ModelErrors({ sort: 7, element: "participants-container", error: "", clear: true });
return true;
}
},
message: '',
}]
});
self.Location = ko.observable().extend({
validation: [{
validator: function (value) {
if (value == undefined) return;
var Address1 = (value.Address1() == undefined ? null : value.Address1());
var City = (value.City() == undefined ? null : value.City());
var State = (value.StateOrProvince() == undefined ? null : value.StateOrProvince());
var Zip = (value.PostalCode() == undefined ? null : value.PostalCode());
var _mustCheck = (self.AppointmentType() == "4" || self.JobReference() != undefined) || (Address1 != null && Address1 != '') || (Address1 != null && Address1 != '') || (City != null && City != '') || (Zip != null && Zip != '');
var _missing = (Address1 == undefined || Address1 == null) || (City == undefined || City == null) || (State == undefined || State == null) || (Zip == undefined || Zip == null);
if (_mustCheck && _missing) {
//addressError.push("<li style='text-align: left; list-style-type: square'>Address is not complete.</li>");
self.ModelErrors({ sort: 8, element: "location-container", error: "<li style='text-align: left; list-style-type: square'>Address is not complete.</li>" });
if (value.Address1() == null || value.Address1() == '') {
//$("#appt-address1").addClass('sp-error');
self.ModelErrors({ sort: 8, element: "appt-address1", error: "", clear: false });
}
else {
//$("#appt-address1").removeClass('sp-error');
self.ModelErrors({ sort: 8, element: "appt-address1", error: "", clear: true });
}
if (value.City() == null || value.City() == '') {
//$("#appt-city").addClass('sp-error');
self.ModelErrors({ sort: 8, element: "appt-city", error: "", clear: false });
}
else {
//$("#appt-city").removeClass('sp-error');
self.ModelErrors({ sort: 8, element: "appt-city", error: "", clear: true });
}
if (value.StateOrProvince() == undefined || value.StateOrProvince() == '') {
//$("#cmboStates").addClass('sp-error');
self.ModelErrors({ sort: 8, element: "cmboStates", error: "", clear: false });
}
else {
//$("#cmboStates").removeClass('sp-error');
self.ModelErrors({ sort: 8, element: "cmboStates", error: "", clear: true });
}
if (value.PostalCode() == null || value.PostalCode() == null) {
//$("#appt-zip").addClass('sp-error');
self.ModelErrors({ sort: 8, element: "appt-zip", error: "", clear: false });
}
else {
//$("#appt-zip").removeClass('sp-error');
self.ModelErrors({ sort: 8, element: "appt-zip", error: "", clear: true });
}
} else {
self.ModelErrors({ sort: 8, element: "location-container", error: "", clear: true });
self.ModelErrors({ sort: 8, element: "appt-address1", error: "", clear: true });
self.ModelErrors({ sort: 8, element: "appt-city", error: "", clear: true });
self.ModelErrors({ sort: 8, element: "cmboStates", error: "", clear: true });
self.ModelErrors({ sort: 8, element: "appt-zip", error: "", clear: true });
}
},
message: ''
}]
});
在 IE11 中导致错误的行是这样的:
self.Location().Address1(model.Address1);
可观察的
self.Participants
使用空数组实例化,并且从一开始就具有值。
然而
self.Location
未提供任何初始值,并且将在没有值的情况下初始化,从而导致未定义。也就是说,在打电话之前什么时候
self.Location().Address1(model.Address1);
您的代码是否提供值来填充 self.location observable?
相关文章:
- 返回 JavaScript 类值而不是对象引用
- 为什么根据括号的位置来引用窗口或对象?并返回undefined
- 表单验证返回引用错误
- 在Angularjs服务中为返回对象引用的http请求提供的数据构建简单的缓存
- _.find 是否返回对对象的引用?如何正确设置结果的属性
- getValues() 从包含引用的单元格中检索值时返回 0.0
- 在 JavaScript 中,如何从更深层次的嵌套方法引用方法的返回值
- 为什么在 JavaScript 中引用对象的不存在属性不会返回引用错误
- 执行 Backbone where 和 findWhere 按值或引用返回模型
- 如何在 javascript 中引用从像 bottle 这样的 Web 框架返回的数据
- 引用变量,它执行函数,但是向变量中添加字符串,将函数作为字符串而不是值返回
- 挖空扩展可观察 取消引用时返回未定义
- 为什么角度返回带有引用错误:ngResource 未定义
- 茉莉花测试返回错误“未捕获的引用错误:未定义要求”
- 返回的Javascript VM对象具有错误的引用
- 为什么对原型的这两个引用返回不同的值?
- 在JavaScript中,如何从方法中通过引用返回数组的一部分
- 如何将ActionScript中函数的引用返回给JavaScript
- document.getElementById对文档的JS引用返回错误
- JavaScript布尔值作为值返回,而不是作为引用返回