tags:

views:

25

answers:

0

I write a lot of ajax javascript code and have a little design problem which I'm not totally satisfied with.

A lot of times I end up with writing something like this:

var typeOfPopup;

function RetrievePopupContent(_typeOfPopup) {
   switch (_typeOfPopup) {
      case Popup1: WebService.RetrievePopup1Content(param1, param2, DisplayPopup, OnError);
         break;
      case Popup2: WebService.RetrievePopup2Content(param1, param2, DisplayPopup, OnError);
         break;
   }
   typeOfPopup = _typeOfPopup;
}

function DisplayPopup(result) {
   switch (typeOfPopup) {
   case Popup1: $get('Popup1').innerHTML = result;
      break;
   case Popup2: $get('Popup2').innerHTML = result;
      break;
}

Allright. This is a simplified example of what I mean. Often I end up with a lot worse code I believe. What I don't like is the global state variabel outside the functions. One solution I wasn't thinking about when writing this code is to send a context object.

I believe you could write something like this:

function RetrievePopupContent(typeOfPopup) {
       switch (typeOfPopup) {
          case Popup1: WebService.RetrievePopup1Content(param1, param2, DisplayPopup, OnError, typeOfPopup);
             break;
          case Popup2: WebService.RetrievePopup2Content(param1, param2, DisplayPopup, OnError, typeOfPopup);
             break;
       }
    }

    function DisplayPopup(result, typeOfPopup) {
       switch (typeOfPopup) {
       case Popup1: $get('Popup1').innerHTML = result;
          break;
       case Popup2: $get('Popup2').innerHTML = result;
          break;
    }

Is this the recommended way?

What I also want to do is to be able to write something like this:

function RetrievePopupContent(typeOfPopup) {
       switch (typeOfPopup) {
          case Popup1: WebService.RetrievePopup1Content(param1, param2,
             new function(result) {
                $get('Popup1').innerHTML = result;

             }, OnError);
             break;
          case Popup2: WebService.RetrievePopup2Content(param1, param2,
             new function(result) {
                $get('Popup2').innerHTML = result;
             }, OnError);
             break;
       }
    }

Is this possible at all? To declare the callback function anonymous? I am grateful for all opinions on the two options I mentioned myself and also new alternatives to get rid of my global variables I have used this way.

related questions