当前位置: 首页 > 面试题库 >

继承Sails.js模型的属性和生命周期功能

喻子航
2023-03-14
问题内容

我想创建一组自定义的属性和生命周期方法,以在所有Sails.js模型之间共享。

Sails.js通过调用Waterline.Collection.extend()方法并提供在/api/models目录中找到的模型定义来自动创建和注册模型对象。

从父级扩展模型定义的最佳方法是什么?我已经尝试过使用,_.extend(sails.config.model.parentModel, childModel)但是可悲的sails是该对象没有全局公开(因为这是在加载orm挂钩之后完成的)。我还可以简单地require()将所有模型中的基本模型进行扩展。

什么是与Sails一起使用的干净方法?


问题答案:

使用config/models.js为模型提供全局默认值是完全合法的。关于覆盖实例和类方法,根据我的测试,没有什么值得关注的。定义sails.config.models模型定义中存在的属性/方法将对此模型覆盖它,而未定义则不会。

定义

// config/models.js
module.exports.models = {
  attributes: {
    // base model instanceMethod
    toJSON: function() {
      console.log('base.toJSON');
      return this.toObject();
    }
  },

  // base model classMethod
  test: function() {
    console.log('base.test');
  }
};


// api/models/first.js
module.exports = {
  attributes: {

  },

  // Overriding classMethods and lifecycle callbacks
  test: function() {
    console.log('first.test');
  }
};

// api/models/second.js
module.exports = {
  attributes: {
    // Overriding instance methods and attributes
    toJSON: function() {
      console.log('second.toJSON');
      return this.toObject();
    }
  },
}

测验

> sails.models.first.test();
>'first.test' // sails.config.models.test overridden

> sails.models.first.findOne(1).exec(err,res){ res.toJSON();  });
> 'base.toJSON' // sails.config.models.attributes.toJSON not overridden

> sails.models.second.test();
> 'base.test'; // sails.config.models.test not overridden

> sails.models.second.findOne(1).exec(err,res) { res.toJSON(); });
> 'second.toJSON' // sails.config.models.attributes.toJSON overridden


 类似资料:
  • 本文向大家介绍测试生命周期模型?相关面试题,主要包含被问及测试生命周期模型?时的应答技巧和注意事项,需要的朋友参考一下 V模型、W模型、瀑布模型、 螺旋模型、敏捷H模型 软件测试流程 1、需求分析,需求评审 2、制定测试计划、计划评审 3、编写测试用例、用例评审 4、测试实施阶段、执行测试用例 按照设计好的用例、准备好的数据和制定的测试策略,实施进行具体的测试过程 5、测试评估阶段 测试总结、缺陷

  • 当在第四章讨论引用时,我们遗漏了一个重要的细节:Rust 中的每一个引用都有其 生命周期(lifetime),也就是引用保持有效的作用域。大部分时候生命周期是隐含并可以推断的,正如大部分时候类型也是可以推断的一样。类似于当因为有多种可能类型的时候必须注明类型,也会出现引用的生命周期以一些不同方式相关联的情况,所以 Rust 需要我们使用泛型生命周期参数来注明他们的关系,这样就能确保运行时实际使用的

  • 我有一个类,比如说,我想用Jackson从JSON中填充它,但是属性名因源而异。下面是代码当前的外观: 正如您所看到的,和在结构上是相同的,但我需要不同的子类来指定不同的属性名称。 是否有一些方法可以在不需要重新声明和重新实现每个方法的样板的情况下强制执行模型?

  • 下面是一个资源借用的例子: fn main() { let a = 100_i32; { let x = &a; } // x 作用域结束 println!("{}", x); } 编译时,我们会看到一个严重的错误提示: error: unresolved name x. 错误的意思是“无法解析 x 标识符”,也就是找不到 x , 这是因为像很多编

  • 我对铁锈寿命的学习过程如下(基于铁锈书): 我想注释,当引用后面的值超出范围时 通常(并不总是!请参阅. data部分,即'静态')值位于块中 我们注释像这样的块,例如结构字段像 。 在哪一点上我的理解是错误的?提前感谢你对我的宽容。 免责声明:

  • 本文向大家介绍AngularJS深入探讨scope,继承结构,事件系统和生命周期,包括了AngularJS深入探讨scope,继承结构,事件系统和生命周期的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了AngularJS的scope,继承结构,事件系统和生命周期。分享给大家供大家参考,具体如下: 深入探讨 Scope 作用域 每一个 $scope 都是类 Scope 的一个实例。类 Sco