[英]How to pass a variable to a function that's part of the parameters of a function call?
for (var i = 0; i < json.length; i++) {
$.Mustache.load('/mustaches.php', function(i) {
//Do Something
});
}
在這種情況下,如何將var i
傳遞給函數?
編輯:對不起我實際上並不想讓Mustache.load調用太多次。 只有一次。 我怎樣才能做到這一點?
這比您想象的要復雜一些,因為您必須確保傳遞正確的i
值,以便回調不使用循環結束的值。
for (var i = 0; i < json.length; i++) {
(function(i){
$.Mustache.load('/mustaches.php', function() {
// use i. Call a function if necessary
//Do Something
});
})(i);
}
關於回調術語:它指的是作為參數傳遞的函數,以便您調用的函數可以將其調用回來。
要理解我寫的代碼,你必須
i
具有循環結束的值時 i
解決問題的一種優雅方法是使用bind
方法。
for (var i = 0; i < json.length; i++) {
$.Mustache.load('/mustaches.php', function(i) {
//Do Something
}.bind(this, i));
}
bind
方法返回一個帶有新上下文的新函數(在本例中為this
),並將一個(或多個)參數應用於您的函數(在此特定情況下為i
)。 你可以在這里找到更多關於bind
和currying
信息 。
編輯。 您只需加載模板一次即可優化循環。 實際上, $.Mustache.load
在循環的每個循環中獲取/mustache.php
。 此外,由於函數使用AJAX異步獲取模板,因此模板中的排序可能不一致(一個響應可能需要比其他響應更長的時間)。 修復非常簡單:我們加載模板,然后迭代循環。
$.get('/mustache.php').done(function(template){
$.Mustache.add('my-template', template);
for (var i = 0, len = json.length; i < len; ++i) {
var rendered_template = $.Mustache.render('my-template', {
i: i,
...
});
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.