特定のイベントでコントロールによって呼び出される独自のスクリプト名をユーザーが提供できるようにするユーザー コントロールがあります。
次のコードがあります。
initialize : function()
{
// Call the base initialize method
Point74.WebAutoComplete.callBaseMethod(this, 'initialize');
$(document).ready(
Function.createDelegate(this, this._onDocumentReady)
);
},
_onDocumentReady : function()
{
var me = this;
$("#" + me.get_id()).autocomplete(me.get_ashxAddress(),
{
formatItem: function(item)
{
return eval(me.get_formatFunction() + "(" + item + ");");
}
}
).result(me.get_selectFunction());
}
me.get_formatFunction には、関数の名前、つまり「FormatItem」が含まれます。この例は現在 eval を使用していますが、これは使用したくありません...さらに、この例はとにかく機能しませんが、何をしようとしているのかを示したいと思いました。
上記の例では、'item' が文字列配列であり、eval がそれを 1 つの長い文字列に変換しようとするため、値未定義エラーが発生します。
名前付き関数への文字列配列として「アイテム」を通過するこの機能を実現するにはどうすればよいですか
名前付き関数を渡すのが悪い考えである場合、代替手段はありますか?
これは私のコントロールが宣言されている方法です:
<p74:WebAutoComplete runat="server" ID="ato_Test" AshxAddress="WebServices/SearchService.ashx"
FormatFunction="formatItem" SelectFunction="searchSelectedMaster" />