我的 Backbone 模型存在范围问题。我试图引用 Backbone.Validation 对象内的模型函数。
即,我无法从 validation
对象/映射中访问模型函数 validateDob
:
Backbone.Model.extend({
validation: {
firstname: { required: true, msg: _('First Name is required').translate() }
, dobday: this.validateDob // this. refers to the immediate object {}
, dobmonth: validateDob // undefined function
, dobyear: this.validateDob // How can I access the function validateDob?
}
, validateDob: function(value) {
var selDay = $('select[name="dobday"] option:selected').val();
var selMonth = $('select[name="dobmonth"] option:selected').val();
var selYear = $('select[name="dobyear"] option:selected').val();
if (!Utils.isAdult(selDay, selMonth, selYear))
return _('You have to be at least 18 years old.').translate();
}
});
有什么建议我可以如何设置吗?
最佳答案
查看您的代码,validateDob
不需要访问实例,因此您可以将其设为命名函数,如下所示:
function validateDob(value) {
var selDay = $('select[name="dobday"] option:selected').val();
var selMonth = $('select[name="dobmonth"] option:selected').val();
var selYear = $('select[name="dobyear"] option:selected').val();
if (!Utils.isAdult(selDay, selMonth, selYear))
return _('You have to be at least 18 years old.').translate();
}
Backbone.Model.extend({
validation: {
firstname: {
required: true,
msg: _('First Name is required').translate()
},
dobday: validateDob,
dobmonth: validateDob,
dobyear: validateDob
},
validateDob: validateDob
});
<小时/>
但是,不建议使用全局选择器直接从 DOM 访问值。您应该使用范围为 View 元素的选择器将这些值设置为模态属性。
在这种情况下,假设您使用 backbone.validation插件,您可以定义一个返回验证配置的函数,例如:
Backbone.Model.extend({
validation: function() {
return {
firstname: {
required: true,
msg: _('First Name is required').translate()
},
dobday: this.validateDob, // this should be modal instance now
dobmonth: this.validateDob,
dobyear: this.validateDob
}
},
validateDob: function(value) {
// Now context should be the modal instance so you can do this.get('prop')
var selDay = $('select[name="dobday"] option:selected').val();
var selMonth = $('select[name="dobmonth"] option:selected').val();
var selYear = $('select[name="dobyear"] option:selected').val();
if (!Utils.isAdult(selDay, selMonth, selYear))
return _('You have to be at least 18 years old.').translate();
}
});
关于javascript - 主干验证自定义函数的主干模型范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43315224/