如何获取水线记录的型号名称或模型类?

Hua*_*afu 4 watermark node.js sails.js waterline

虽然不同于我在此问过的上一个问题,但它是相关的,所以想要链接它.

我一直在努力寻找如何获得记录的模型名称(标识)或模型"类"(暴露sails.models).那么,给定一个waterline记录,我怎样才能找到它的型号名称或类?

示例(当然,我知道该模型User是一个例子):

User.findOne(1).exec(function(err, record) {
  // at this point think that we don't know it's a `user` record
  // we just know it's some record of any kind
  // and I want to make some helper so that:
  getTheModelSomehow(record);
  // which would return either a string 'user' or the `User` pseudo-class object
});
Run Code Online (Sandbox Code Playgroud)

我试图访问它,record.constructor但事实并非如此User,我找不到任何关于record公开模型的伪类对象或记录的模型名称的属性.

更新: 为了澄清,我想要一个函数,我将给出任何记录,并将该记录的模型作为模型名称或模型伪类对象返回,如sails.models命名空间.

modelForRecord(record) // => 'user' (or whatever string being the name of the record's model)
Run Code Online (Sandbox Code Playgroud)

要么

modelForRecord(record) // => User (or whatever record's model)
Run Code Online (Sandbox Code Playgroud)

Hua*_*afu 7

哇,经过几个小时的研究,这就是我为那些感兴趣的人做的事情(这是一个非常棘手的黑客,但现在无法找到另一种方式):

假设record你是从a findOne,create...中得到的,在回调中,找出它是什么实例,然后找到拥有该记录的模型的名称,你必须遍历所有的模型(sails.models.*)并制作一个instanceof这样称呼:

function modelFor(record) {
  var model;
  for (var key in sails.models) {
    model = sails.models[key];
    if ( record instanceof model._model.__bindData__[0] ) {
      break;
    }
    model = undefined;
  }
  return model;
}
Run Code Online (Sandbox Code Playgroud)

不要试图简单地做instanceof model,这不起作用

如果您需要模型名称,只需modelFor(record).globalId获取它.

  • 这在Sails`0.12.3`中不起作用 (2认同)