我的代码遇到了一些“奇怪”的问题。它主要是西班牙语,但我相信你会得到。
$('#favoritos').live( 'pagecreate',function(event){
var favoritos = false;
var fav_bus = '';
var fav_bici = '';
if (!isLocalStorageAvailable()) // Si no hay Local Storage para qué queremos entrar aqui
$.mobile.changePage('#errorFavoritos', { transition: "pop" });
else{
$.each(localStorage, function(index){
var itemKey = localStorage.key(index);
if (itemKey.indexOf('fav')){ // Si es un favorito
var splitted = itemKey.split('-');
var tipo = splitted[0];
var numero = splitted[2];
favs_locales[itemKey] = {
'numero' : numero,
'id' : itemKey
};
if (tipo == 'bus'){
favoritos = true;
fav_bus = '<div data-role="collapsible>' +
'<h3>Parada ' + numero+ '</h3>' +
'<ul data-role="listview" data-inset="true" id="'+itemKey+'">';
pedirTiempos(numero).pipe(formatearTiempos).done(function(html){
fav_bus += html + '</ul></div>';
});
}
}
});
// Ya tenemos los datos formateados
console.log(fav_bus);
if (fav_bus != ''){
$('#contentFavoritos').append(
'<h3 style="text-align: center;">Paradas de Bus</h3>' +
'<div data-role="collapsible-set">' +
fav_bus +
'</div>');
}
}
});
这个问题来自于这个功能:
pedirTiempos(numero).pipe(formatearTiempos).done(function (html) {
fav_bus += html;
});
更改后的fav_bus
(在函数中)它没关系,但console.log(fav_bus)
就在函数之后,它是错误的。它就像在功能中没有改变一样。
我试图返回html
,但它输出的是[Object, object]
(作为字符串)。
任何提示?
编辑:
我试图将它存储到一个时态DOM元素中,但没关系,但是我无法输出那个HTML(虽然它就在那里)。
pedirTiempos(numero).pipe(formatearTiempos).done(function(html){
fav_bus += html + '</ul></div>';
$('#busTemp').html(fav_bus);
});
if ($('#busTemp').length > 0){
console.log($('#busTemp').html());
并且什么都不输出!
答案 0 :(得分:1)
从我的代码中可以看出,done
看起来像是异步调用。所以你传递给它的函数最有可能在fav_bus += '</ul></div>
之后运行。这就是你没有看到变化的原因。
如果您在调用console.log
后刚刚传递给done
和另一个console.log
的函数中放置done
,您可能会看到外部console.log
1}}先跑。
要解决此问题,任何后续fav_bus
操作都需要在您传递给done
的匿名函数内完成。
此外,您无法从异步函数返回任何内容。这就是为什么你需要一个回调,它将对异步结果进行操作。
修改强>
将代码更改为for..in
不应该真正破坏任何内容,除非您明确使用循环索引。您应该可以通过以下更改使其按原样运行:
if (tipo == 'bus') {
favoritos = true;
fav_bus = '<div data-role="collapsible>' + '<h3>Parada ' + numero + '</h3>' + '<ul data-role="listview" data-inset="true" id="' + itemKey + '">';
pedirTiempos(numero).pipe(formatearTiempos).done(function (html) {
fav_bus += html + '</ul></div>';
// Ya tenemos los datos formateados
if (fav_bus != '') {
$('#contentFavoritos').append('<h3 style="text-align: center;">Paradas de Bus</h3>' + '<div data-role="collapsible-set">' + fav_bus + '</div>');
}
});
}
答案 1 :(得分:0)
fav_bus
变量是.live
函数的本地变量,.done
不可见。
将代码移出匿名函数,这与:
相同function foo() {
var a = 5;
bar();
}
function bar() { // "a" is out of scope here.
a += 5;
}