我已经在Adonis中导入了一些课程
const User = use('App/Models/User')
const Orders = use('App/Models/Orders')
我希望能够动态访问上述类之一。我的意思是,变量将保存我要访问的类。该变量将通过用户的API调用进行填充。
let className = 'Orders'
如何使用className
变量访问Orders类。
我尝试过
[className].query().where('orderNumber','123').fetch()
但这似乎不起作用。
答案 0 :(得分:4)
创建一个DETACHED_PROCESS = 8 # bit mask taken from the linked doc below
subprocess.Popen(executable, creationflags=DETACHED_PROCESS, close_fds=True)
地图:
name -> class
,然后使用const classes = {
__proto__: null, // to avoid people being able to pass something like `toString`
Users,
Orders,
};
// or if you don't want to use __proto__
const classes = Object.assign(
Object.create(null),
{Users, Orders}
);
访问正确的类。当然,请验证该类是否存在。
我尝试过
classes[className]
但这似乎不起作用。
在这种情况下,[className].query().where('orderNumber','123').fetch()
表示数组文字,因此[...]
仅创建一个包含[className]
(在您的示例中为字符串)作为元素的数组。
答案 1 :(得分:0)
完全避免将变量转换为字符串。只需使用:
let className = Orders;
className.query().where('orderNumber','123').fetch()
如果通过API调用实例化该类,请使用简单的switch语句:
let class;
switch (apiCall.name) {
case 'orders':
class = Orders;
break;
case 'users':
class = Users;
break;
default:
throw 'Invalid API Call';
}
class.query().where('orderNumber','123').fetch()
答案 2 :(得分:0)
最简单的方法是访问eval(className).query().where('orderNumber','123').fetch()
,但是如果您想将值作为实际的类进行检查,则可能应该实现switch或if-else-if来检查和分配className,并仅在实际存在。