2013-08-05 32 views
0

我想重新使用一些验证规则(登录/注册)。但是,如果我给你验证的用户模式,jugglingdb还增加了这些验证到BaseUser(这是不是我想要的,我不知道怎么发生这种情况)Jugglingdb架构_validations突然共享

// Provide user properties to re-use for login validation 
var common_properties = { 
    email : String, 
    password : String 
}; 

var common_validations = [ 
    ['email', {validation: 'presence'}], 
    ['email', {validation: 'format', with: /@.*?\./}], 
    ['password', {validation: 'presence'}], 
    ['password', {validation: 'length', min: 6}] 
]; 

var BaseUser = schema.define('BaseUser', common_properties); 
    BaseUser._validations = common_validations; 


var User = schema.define('User', _.extend(common_properties, { 
    name  : String, 
    salt  : String, 
    created : { type: Date, default: Date.now } 
})); 

User._validations = common_validations; 

User.validatesPresenceOf('name'); 
User.validatesUniquenessOf('email'); 


console.log(BaseUser._validations) 

// [ [ 'email', { validation: 'presence' } ], 
// [ 'email', { validation: 'format', with: /@.*?\./ } ], 
// [ 'password', { validation: 'presence' } ], 
// [ 'password', { validation: 'length', min: 6 } ], 
// [ 'name', { validation: 'presence' }, undefined ],   Should not be here?? 
// [ 'email', { validation: 'uniqueness' }, { async: true } ] ] Should not be here?? 

有谁知道如何使用Javascript/jugglingdb做这个?我只是想将common_validations分配给BaseUser,没有别的。

回答

0

我还没有跟踪它,但我猜测问题是你正在为BaseUser和User构造函数分配相同的验证数组(common_validations)。由于BaseUser和User都具有指向相同数组实例的_validations属性,因此添加新的验证会为该数组添加一个新条目,因此它将显示在这两种类型中。

尝试将_validations分配给common_validations数组的副本,而不是指向共享实例。

+0

嗯,是的,我希望你的答案可以帮助人们。据我所知,没有真正的方法克隆/复制在JavaScript中的对象?因此,将它分配给'common_validations'副本意味着我必须重新创建该对象。这几乎使我的'扩展'无用。 (但是谢谢你的回答!) – Tessmore

+0

你不需要深入克隆所有的对象 - 只需要创建一个数组的浅表副本。例如。 BaseUser._validations = common_validations.slice(0); –