在我使用Backbone 1.0.0的代码中,我的模型的验证功能只在我去的时候被调用:
myThing.set( "title", "My title string", { validate : true } );
我的模型的initialize函数中是否有一种方法可以将默认值设置为true,以便:
myThing.set( "title", "My title string" );
会导致调用validate函数吗?
答案 0 :(得分:2)
无法覆盖方法的默认行为,但您仍然可以直接覆盖set
方法,例如:
var set = Backbone.Model.prototype.set;
Backbone.Model.prototype.set = function(key, val, options) {
return set.call(this, key, val, _.extend({validate: true}, options));
}
请记住,set
方法必须处理2种不同的情况(因为它允许传递对象作为参数)。所以这个例子不会一直有效。您可以参考实际的Backbone代码来查看它是如何完成的示例。
答案 1 :(得分:1)
@Loamhoof给出的答案非常不完整。这是一个完整的解决方案:
/**
* @file
* A Backbone Model subclass that enforces validation when calling set().
*/
(function (Backbone) {
"use strict";
Backbone.MyBaseModel = Backbone.Model.extend({
/**
* {@inheritdoc}
*/
initialize: function (options) {
this.__initialized = true;
return Backbone.Model.prototype.initialize.call(this, options);
},
/**
* {@inheritdoc}
*/
set: function (key, val, options) {
if (this.__initialized) {
// Deal with both the "key", value and {key:value}-style arguments.
if (typeof key === 'object') {
key.validate = true;
}
else {
if (!options) {
options = {};
}
options.validate = true;
}
}
return Backbone.Model.prototype.set.call(this, key, val, options);
}
});
}(Backbone));
答案 2 :(得分:0)
我认为这会对您有所帮助!
set: function (key, val, options) {
if (!options) {
options = {};
options.validate = true;
}
return Backbone.Model.prototype.set.call(this, key, val, options);
}