我正在尝试使用ASP MVC4中的淘汰框架创建一个下拉列表。验证要求相当简单 - 必须在验证控件之前选择一个国家/地区。视图模型中的相关代码如下:
function viewModel(model) {
var _self = this;
// Various guff
_self.ConfirmationOption = ko.observable(model.ConfirmationOption).extend({ required: { message: _self.mdata.requiredMessage } }); //mdata is part of the guff
_self.CountryOfPractice = ko.observable(model.CountryOfPractice).extend({
required: {
message: "You must select a country",
onlyIf: function () { return (_self.ConfirmationOption() === '4' && (_self.CountryOfPractice() === null || _self.CountryOfPractice() === undefined)); }
}
});
// Assorted other guff
}
当我尝试运行时,Firebug告诉我,尝试解析时出现错误,显示:
TypeError:_self.CountryOfPractice()不是函数。
我对敲除的有限理解是声明为ko.observable
的属性不是严格的JS属性,必须作为函数访问才能获得它们的当前值。在大多数其他代码区域,这通常可以正常工作。我尝试访问验证器扩展中的值的原因是为了确保已经进行了选择。
我可以在调试器中看到CountryOfPractice
还不是_self
的一部分,所以我可以看到错误是如何发生的。我尝试将测试分解为另一个事先声明的函数,但该函数失败了因为它还没有看到CountryOfPractice()
,如果我把它放在这个方法之后就失败了因为CountryOfPractice()
的扩展器没有但看到了我的验证方法......
我需要使用哪种模式才能使功能正常工作?
答案 0 :(得分:0)
解决方案是在新行上调用extend函数 - 任何人都可以解释原因吗?
_self.CountryOfPractice = ko.observable(model.CountryOfPractice);
_self.CountryOfPractice.extend({
required: {
message: "You must select a country",
onlyIf: function () { return (_self.ConfirmationOption() === '4' && (_self.CountryOfPractice() === null || _self.CountryOfPractice() === undefined)); }
}