Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 继承Sails.js模型的属性和生命周期功能_Javascript_Node.js_Sails.js_Waterline - Fatal编程技术网

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

Javascript 继承Sails.js模型的属性和生命周期功能,javascript,node.js,sails.js,waterline,Javascript,Node.js,Sails.js,Waterline,我想创建一组自定义的属性和生命周期方法,在我的所有Sails.js模型之间共享 Sails.js通过调用Waterline.Collection.extend()方法并提供/api/models目录中的模型定义,自动创建并注册模型对象 从父对象扩展模型定义的最佳方式是什么?我已经尝试过使用.extend(sails.config.model.parentModel,childModel),但遗憾的是sails对象没有全局公开(因为这是在加载orm钩子之后完成的)。我还可以在所有模型中简单地req

我想创建一组自定义的属性和生命周期方法,在我的所有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

刚刚发现有
sails.config.model
在规范化时与每个模型合并。在实现生命周期功能时,将此作为基础模型是否有意义?我的基本模型定义了
toJSON()
方法。当我的子模型也需要重写时,我应该怎么做?目前我正在注意在重写时保持父对象
toJSON()
行为的完整性。是否可以调用父方法?像下面这样调用
sails.models.toJSON()
将得到“无方法”错误,尽管我可以看到列出的函数(通过
console.log
)api/models/second.js module.exports={attributes:{//重写实例方法和属性到json:function(){var somethingElse=sails.models.toJSON();//执行其他操作..返回somethingElse;},}