Matthias Nicklisch hat eine interessante Frage im XPages Forum gestellt, nachdem er festgestellt hat, dass im Designer zwar ein OnStart- / OnComplete-Event für die TypeAhead-Funktion angeboten wird, der Code aber als Deprecated angezeigt wird – und auf der XPage auch nicht funktioniert: Wie kann ein OnStart- / OnComplete-Event trotzdem verwendet werden?
Meine Idee dazu ist, den darunter liegenden dojo.xhr-Request zu hijacken, und auf diese Weise die Events zu erhalten. Dadurch lässt sich der Code bequem auf die jeweilige XPage einbetten, ohne das eine Manipulation der original Javascript-Dateien erfolgen muss.
Der folgender Code muß in einem CSJS-Scriptblock eingebettet werden. Dann erhält man für die TypeAhead-Funktion die Events, um zum Beispiel ein kleines “Loading”-Icon einzublenden, wenn die Daten vom Domino Server geladen werden.
var typeAheadLoad; dojo.addOnLoad( function(){ /*** hijacking xhr request ***/ if( !dojo._xhr ) dojo._xhr = dojo.xhr; dojo.xhr = function(){ try{ var args = arguments[1]; if( args['content'] ){ var content = args['content']; if( content['$$ajaxmode'] ){ if( content['$$ajaxmode'] == "typeahead" ){ /*** hook in load function ***/ typeAheadLoad = args["load"]; /*** overwrite error function ***/ args["error"] = function(){ alert('Error raised!') }; /*** hijack load function ***/ args["load"] = function(arguments){ /*** On Start ***/ alert("On Start!"); /*** call original function ***/ typeAheadLoad(arguments); /*** On Complete ***/ alert("On Complete!") }; } } } }catch(e){} dojo._xhr( arguments[0], arguments[1], arguments[2] ); } });