2016-01-15 74 views
0

我正在爲Wordpress編寫一個TinyMCE插件,我剛剛遇到了一個關於如何處理事情的小問題。基本上,我使用依賴於計數器i的循環。該循環負責構建一個包含TinyMce細節的數組。其中一件事是通過i計數器的函數調用。非ES6讓替代

但是,當點擊實際註冊時,該計數器總是處於最大值。我通過在我的循環中使用let臨時解決了這個問題。這裏的循環:

for(let i = 0; i <= pmsb.config.length - 1; i++) { 
    menu[i] = { 
     text: pmsb.config[i].title, 
     onclick: function() { 
      open_dialog(i); 
     } 
    } 
} 

我知道,let不能很好地支持,並與該是一個WordPress插件,我已經在這我的目標受衆將使用的瀏覽器沒有真正的控制。

因此,在上述循環的情況下 - 如何使函數調用接收正確的數字(如let那樣)?

+0

@EricLease:這將有同樣的問題。 'for'循環沒有範圍。 –

回答

3

而非for循環,可使用forEach代替 - 所得回調將自動接收索引作爲將在範圍被正確地綁定的參數:

pmsb.config.forEach(function(config, i) { 
    menu[i] = { 
     text: config.title, 
     onclick: function() { 
      open_dialog(i); 
     } 
    } 
}); 

如果(如顯示可能)有一個單對一個從pmsb.config[i]映射到menu[i]你就能更好地仍然使用.map代替forEach

var menu = pmsb.config.map(function(config, i) { 
    return { 
     text: config.title, 
     onclick: function() { 
      open_dialog(i); 
     } 
    } 
});