Frage

Ich habe ein Benutzersteuer bekam die Benutzer können ihre eigenen Skriptnamen versehen, die durch die Kontrolle über bestimmte Ereignisse genannt werden.

Ich habe den folgenden Code:

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 enthält den Namen einer Funktion, das heißt „FORMAT“. Dieses Beispiel ist zur Zeit eval, die ich nicht verwenden will ... plus dieses Beispiel sowieso nicht funktioniert, aber ich dachte, ich würde zeigen, was ich versuche zu bekommen.

In dem obigen Beispiel ich als ‚item‘ Wert undefiniert Fehler erhalten, ist ein String-Array und eval versucht es in eine lange Zeichenfolge zu konvertieren.

Wie kann ich diese Funktionalität erreichen jede noch passieren ‚item‘ als String-Array auf die benannte Funktion?

Wenn genannten Funktionen vorbei eine schlechte Idee ist, gibt es Alternativen?

Dies ist, wie meine Kontrolle deklariert wird:

<p74:WebAutoComplete runat="server" ID="ato_Test" AshxAddress="WebServices/SearchService.ashx" 
     FormatFunction="formatItem" SelectFunction="searchSelectedMaster" />
War es hilfreich?

Lösung

me[me.get_formatFunction()](item);

Andere Tipps

Wenn Ihre Absicht ist es, alle Argumente an die vom Benutzer festgelegten Funktion zu übergeben, die FORMAT übergeben werden (), dann statt mit:

formatItem: function(item)
{
 return eval(me.get_formatFunction() + "(" + item + ");");
}

Verwendung:

formatItem: function()
{
 return me.get_formatFunction().apply(me, arguments));
}

Das gilt () Methode kann auf eine Funktionsobjekt aufgerufen werden, damit die Funktion unter Verwendung der angegebenen „dieses“ und Argument Array aufzurufen. Siehe: http://odetocode.com/blogs/scott/archive/2007/07/04/function-apply-and-function-call-in-javascript.aspx für eine Erklärung des Anrufs () und gelten ( ) Funktionen in Javascript.

Dann werden Sie get_formatFunction () ein Funktionsobjekt zurückzukehren, anstatt nur den Namen der Funktion; oder Sie können versuchen:

me[me.get_formatFunction()]

... eine Funktion zu erhalten, die auf ‚Ich‘ durch seinen Namen definiert ist. (Beachten Sie, dass, wenn get_formatFunction () die Zeichenfolge 'myFunc' gibt, dann ist dies äquivalent zu me.myFunc)

[Edit: geänderte Verweise auf 'this' 'me' zu verwenden, anstatt]

Ich bin mir nicht sicher, was Ihr Gesamtplan ist, aber Sie können statt ihre Namen um sich Funktionen übergeben:

function Foo(x, y) {
  // do something
}

function Bar(f, a, b) {
  // call Foo(a,b)
  f(a,b);
}

Bar(Foo, 1, 2);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top