3

私のオブジェクトにはコールバックがあります:

var MyObject = {
CallBack: "function (whichSubMenuIsClicked, subMenuObjectTag) { self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier);}",
}

コールバックは文字列です。次に、MyObject.CallBack(param1、param2)を使用して実行する必要があります。これは、jqueryまたはjavascriptを使用してどのように実行できますか。この場合の自己は、別のウィジェットを呼び出す元のウィジェットです。したがって、コールバックは元のウィジェットで行われます。

4

4 に答える 4

3

文字列としての機能はありません。

関数を関数として持つ:

var MyObject = {
   CallBack: function (whichSubMenuIsClicked, subMenuObjectTag) {
                  self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier);
             }
}
于 2012-11-23T14:12:10.830 に答える
1

コンストラクターを使用します。Functionコンストラクターは、パラメーター名のリストとそれに続く関数本体を受け入れます。

var MyObject = {
    CallBack: "self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier)",
};

var myfunc = new Function("whichSubMenuIsClicked", "subMenuObjectTag", MyObject.CallBack);
于 2012-11-23T14:17:24.550 に答える
0

@Curtが示したように、関数を関数として記述する必要があります。文字列として(たとえば、ユーザー入力から)取得する以外に選択肢が本当にない場合にのみ、最初にそれを解析して実行可能コードにし、それを呼び出す必要があります。そうする方法はですeval。問題は参照selfになります。これは関数内の変数ではなく、グローバルであると見なされます。それでも、withステートメントを使用してそれを回避できます。

var MyObject = {
    CallBack: "function (whichSubMenuIsClicked, subMenuObjectTag) { self.doStuff(whichSubMenuIsClicked.SubMenuItem, whichSubMenuIsClicked.HeaderColumnName, whichSubMenuIsClicked.DivIdentifier);}",
};
var widget = {doStuff: console.log};
var fn;
with( {self: widget} ) {
    fn = eval( MyObject.CallBack );
}
fn({SubMenuItem: "…", HeaderColumnName: "…", DivIdentifier: "…"});
于 2012-11-23T14:23:09.077 に答える
-2

非常に悪いアプローチですが、あなたはそれを行うことができますeval()

var MyObject = { CallBack: "AName = function(param1, param2) { alert(param1 + param2); }", }

eval(MyObject.CallBack+"(1,2)"); 

デモ

于 2012-11-23T14:12:45.180 に答える