我需要一种方法来执行具有参数的函数:
func1(param1, param2)
{...
}
当我在另一个函数中获取函数名称及其参数作为参数(或字符串变量)时:
parentFunc()
{
var funcName="func1";
var params = {'param1': 'A', 'param2': 'B'}
//Here I want to execute the funcName (func1) with its params.
}
我尝试过创建customEvent,但是param没有通过:
var event = new CustomEvent("func1", {
"param1": 'A', "param2": 'B'
});
this.element.dispatchEvent(event);//The element is the "parent"
//htmlElement that responsible to the
//event
*这些功能不在同一个文件中,我在单页应用程序(SPA)中进行,所以如下所示这样做不够好:
var fn = window[settings.functionName];
通常 - 我要做的是在自定义元素中 - 当自定义元素中有事件时,可以选择决定执行哪个函数(它在父模板中)
答案 0 :(得分:1)
请考虑向您的函数发送其他内容而不是要执行的函数的名称。您可以尝试例如条件和要执行的函数之间的映射。但是,如果您的心脏被设置为发送函数名称,或者您没有办法不这样做,那么您的朋友就是eval
函数:
function evaluate(name, params) {
let toExecute = (name || 'eval') + '(';
params = (params instanceof Object ? params : {});
for (let key in params) {
toExecute += params[key] + ', ';
}
if (toExecute[toExecute.length - 2] === ',') {
toExecute = toExecute.substr(0, toExecute.length - 2);
}
toExecute += ');';
eval(toExecute);
}
function parentFunc() {
var funcName="func1";
var params = {'param1': 'A', 'param2': 'B'}
//Here I want to execute the funcName (func1) with its params.
evaluate(funcName, params);
}
请花点时间阅读使用eval
here的危险。
答案 1 :(得分:0)
您可以将名称函数作为回调传递给回调:
| PK_ | FK_trans | PK_TransID = FK_trans | FK_expense | ExpenseNumber |
|--------|----------|-----------------------|------------|----------------|
| (null) | (null) | 1 | (null) | (null) |
| (null) | (null) | 2 | (null) | (null) |
| (null) | (null) | 3 | (null) | (null) |
| (null) | (null) | 4 | (null) | (null) |
| (null) | (null) | 5 | (null) | (null) |
| 1 | 6 | 6 | 121 | 378cb082017 |
| (null) | (null) | 7 | (null) | (null) |
| (null) | (null) | 8 | (null) | (null) |
| 2 | 9 | 9 | 115 | (null) |
| (null) | (null) | 10 | (null) | (null) |
| (null) | (null) | 11 | (null) | (null) |
| 3 | 12 | 12 | 110 | (null) |
| (null) | (null) | 13 | (null) | (null) |
| 9 | 14 | 14 | 123 | 22650820170301 |
| 4 | 15 | 15 | 118 | (null) |
| 5 | 16 | 16 | 111 | 0070317,4642k1045917,10235k1071417,9948k2054917 |
如果你想要params的功能:
parentFunc(funcName)
{
var params = {'param1': 'A', 'param2': 'B'}
funcName(params);
}
parentFunc(funcName, param)
{
funcName(param);
}
)
答案 2 :(得分:0)
我真的不明白你想要实现的目标。但我会做这样的事情:
var myObject = {
func1: func1
};
function parentFunc() {
var funcName="func1";
var params = {'param1': 'A', 'param2': 'B'};
myObject[funcName](params.param1,params.param2);
}
parentFunc();
function func1(param1, param2) {
console.log(param1);
console.log(param2);
}
希望它有所帮助。
答案 3 :(得分:0)
我设法在奥里利亚做到了: 这是带有foucusout.trigger的自定义元素,它在适当的时间调用focusoutAction:
<template>
<label>
${title} - ${fieldName}<input title.bind="title"
focusout.trigger="focusoutAction()" focusin.trigger="focusInAction()"
class="${cssClass}" />
</label>
</template>
这是使用focusout.call属性在父视图中使用自定义元素:
<form-input field-name="firstName" title="First Name"
place-holder="Enter first name"
on-focusout.call="validateInput(nameOfElement)" />
这是自定义控件的视图模型中的相关代码:
@bindable onFocusout;
focusoutAction() {
var args =
{
nameOfElement: this.fieldName
};
this.onFocusout(args);
}