[英]Backbone Model Scope Issue with Backbone Validation Custom Function
我的骨干網模型存在范圍問題。 我試圖引用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訪問值。 您應該使用作用於視圖元素的選擇器將這些值設置為模態屬性。
在這種情況下,假設您使用的是ribs.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();
}
});
你可以試試這個
Backbone.Model.extend({
validation: {
firstname: { required: true, msg: _('First Name is required').translate() }
},
initialize:function() {
this.validation.dobyear= this.validateDob;
//you can other props similarly
},
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();
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.