2014-03-25 36 views
0

我不知道什麼是正確的問題之前分配的變量,但我會盡力在我當前工作的代碼解釋:的Javascript得到響應

var container, loader 
switch(section){ 
    case 'A': 
     container = $('#list .container') 
     loader = $('#surveylist') 
     var r = postToServer(data, loader) 
     if(r.cstatus === true){ 
      container.html(r.content) 
     } 
    break 
    case 'B': 
     container = $('#control .container') 
     loader = container 
     var r = postToServer(data, loader) 
     if(r.cstatus === true){ 
      container.html(r.content.panelB) 
     } 
    break 
    case 'C': 
     container = $('#content .container') 
     loader = container 
     var r = postToServer(data, loader) 
     if(r.cstatus === true){ 
      $('#surveyElements').sortable(); 
      $('textarea').autosize(); 
      container.html(r.content.panelC) 
     } 
    break 
} 

正如你所看到的,我重複相同的代碼,並希望簡化該方法,但不確定在谷歌搜索什麼正確的術語。基本上我試圖實現的是這種結構:或者,如果你們有任何重構此代碼的建議嗎?

+0

」在這裏放置'測試'的正確方法是什麼?「放在這裏,你是什麼意思?無論如何,檢查你的代碼,'test'等於'container'。我真的不明白你在找什麼 –

+0

變量'test'在每個'case'內被賦值。但是,正如你所看到的,變量'r'只在'switch'後面聲明,所以'case'中的每個'test'都是無效的。也許我應該把'test'變成一個函數而不是變量?如果是這樣,我怎樣在'test'裏面調用acknowledge'r'? – rolodex

+0

然後在請求回調中使用'r'設置邏輯或使用promise接口方法。搜索關於如何使用ajax的示例http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call –

回答

1

這只是一個草案,仍然可以優化,但可能有所幫助。 「

var sections = { 
    A: { 
     container: $('#list .container'), 
     loader: $('#surveylist'), 
     getTest: (function(container, r){ return container.html(r.content) }) 
    }, 
    B: { 
     container: $('#control .container'), 
     loader: $('#control .container'), 
     getTest: (function(container, r){ return container.html(r.content.panelB) }) 
    }, 
    C: { 
     container: $('#content .container'), 
     loader: $('#content .container'), 
     getTest: (function(container, r){ return container.html(r.content.panelC) }) 
    }, 
}; 
var sectionEntry = sections[section]; 
r = postToServer(data, sectionEntry.loader); 
if(r.cstatus === true){ 
    test = sectionEntry.getTest(sectionEntry.container, r); 
} 
+0

這是我的新見解。我從來沒有想過這樣做的客觀方式,我總是訴諸'switch'!謝啦。這讓我更接近backbone.js! – rolodex