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)
哇,经过几个小时的研究,这就是我为那些感兴趣的人做的事情(这是一个非常棘手的黑客,但现在无法找到另一种方式):
假设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获取它.
| 归档时间: |
|
| 查看次数: |
3182 次 |
| 最近记录: |