【问题标题】:Jugglingdb schema _validations suddenly sharedJugglingdb schema _validations 突然共享
【发布时间】:2013-08-05 11:28:01
【问题描述】:

我想重用一些验证规则(登录/注册)。但是,如果我将验证分配给 User 架构,jugglingdb 还会将这些验证添加到 BaseUser(这不是我想要的,我不知道这是怎么发生的)

// 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,仅此而已。

【问题讨论】:

    标签: node.js jugglingdb


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,是的,我希望您的回答对人们有所帮助。据我所知,没有真正的方法可以在 javascript 中克隆/复制对象?所以将它分配给common_validations 的副本意味着我必须重新创建对象。这几乎使我的“扩展”毫无用处。 (但感谢您的回答!)
    • 您不需要深度克隆所有对象 - 只需制作数组的浅表副本。例如。 BaseUser._validations = common_validations.slice(0);
    猜你喜欢
    • 2017-09-11
    • 2016-08-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2015-04-07
    • 2021-01-19
    相关资源
    最近更新 更多