我正在使用骨干来创建我的所有观点。我的一些观点非常耗费资源,需要一段时间才能加载到模板中。因此,当点击某些lin时,我想首先显示加载叠加层,并在渲染视图时将其删除。
$('.class').live('click', function(){
$("#loading").fadeIn();
// this changes the url and then the view is called.
});
但问题是加载但是只有在渲染视图后才会出现。为什么是这样?这里的事件模式是什么?就像你点击链接一样,它首先加载网址,然后只加载点击回调中的内容,因为它似乎是这样。 即使这样做也是如此:
$('.content a').click(function () {
var f = $(this);
$("#loading").show();
Backbone.history.navigate(f.attr("href"), true);
return false;
});
答案 0 :(得分:0)
这是可能的事件序列:
$("#loading").fadeIn();
被召唤。fadeIn
。例如,看看这样简单的事情:
$('button').click(function() {
$('div').after('<p>Loading...</p>');
for(var i = 0; i < 10000; ++i)
$('div').text(i);
});
演示:http://jsfiddle.net/ambiguous/sEvv5/
您可能需要根据计算机的速度向上或向下调整10000倍。
您需要做的是在您放置#loading
和开始渲染昂贵视图之间将控制权交还给浏览器。一种常见的方法是使用setTimeout
,超时为零;例如:
$('button').click(function() {
$('div').after('<p>Loading...</p>');
setTimeout(function() {
for(var i = 0; i < 10000; ++i)
$('div').text(i);
}, 0);
});
演示:http://jsfiddle.net/ambiguous/qd9Ly/
在您的情况下,请尝试将// this changes the url and then the view is called.
部分放在setTimeout
。