2011-07-11 10 views
1

私はWebチャットアプリケーションを開発中です。上記のコードは、JSON形式で受け取ったレスポンスのデータを処理するために使用します。基本的にどのように動作するかは、Ajaxの長いポーリング要求がサーバーに送信され、ユーザーに送信する必要があるメッセージが取り出されます。 JSによって解析されたJSON形式で出力し、残りの部分を処理するためにMinte.Processor.process(json)が呼び出されます。スイッチケースをより良いものに交換するには?

switch文を別のものに置き換えたいと思います。あなたが見ることができるように、いくつかのコマンドがあります(少なくとも50以上は見積もっています)ので、より洗練されたソリューションが必要です。私は、キーがコマンド名で値がデータであるキーと値のペアの配列を保持するオブジェクトを作成することを考えていましたが、それがスイッチより効率的でないかどうかはわかりません。あなたは自分の名前が機能し、それぞれに割り当てられた匿名関数である人の特性を有するObject ...

var handlers = { 
    'changeUsername' : function(content) { 
     Minte.Client.username = content; 
    }, 
    ... 
}; 

var thisCommand = handlers[command]; 

if (thisCommand) { 
    thisCommand.call(this, content); 
} 

を持つことができ

+0

、しかし、あなたはすぐにその変数を反復処理を開始します。 JavaScriptの 'Object'のように聞こえます。 JSON文字列だった場合は、まずそれを解析してJavaScriptのオブジェクトにする必要があります。 – alex

+2

あなたのキーボードに猫が座っていましたか? – Jordan

答えて

3

各コマンドの処理方法を知っており、それぞれのメソッドを持つハンドラオブジェクトを作成できます。おおよそような何か:

var myHandler = { 
    addChatNotice: function(content) { 
     Minte.UI.addChatNotice(content); 
    }, 

    changeUsername: function(content) { 
     Minte.Client.username = content; 
    } 

    //etc... 
}; 

Minte.Processor.process = function(json) { 
    for (var x in json) { 
     var entry = json[x]; 

     for (var command in entry) { 
      var content = entry[command]; 

      //invoke the handler function with the content 
      myHandler[command](content); 
     } 
    } 
}; 

は簡単な例です:それはあなたの関数の引数が `json`と呼ばれていることは注目に値するかもしれhttp://jsfiddle.net/XLrN5/

2

無名関数のそれぞれの最初の引数はcontent変数になります。

関連する問題