我正在使用backbone来创建我所有的视图。我的一些视图是相当资源密集型的,需要一段时间才能加载到模板中。所以当点击某行时,我想首先显示一个加载覆盖,并在呈现视图时删除它。
$('.class').live('click', function(){
$("#loading").fadeIn();
// this changes the url and then the view is called.
});
但问题是,加载but只在视图呈现后出现。为什么会这样?这里的事件模式是什么?就像当你点击链接时,它会先加载url,然后只加载click回调中的内容,因为看起来是这样的。即使这样,它也会做同样的事情:
$('.content a').click(function () {
var f = $(this);
$("#loading").show();
Backbone.history.navigate(f.attr("href"), true);
return false;
});
1条答案
按热度按时间nlejzf6q1#
这是事件的可能顺序:
1.点击发生。
1.调用
$("#loading").fadeIn();
。1.您更改了URL,路由器即被激活。
1.视图即被激活并开始渲染。
1.视图完成渲染。
1.浏览器再次获得控制权,并开始清除工作积压,特别是,浏览器最终从1到达
fadeIn
。例如,看看像这样简单的东西会做什么:
演示:http://jsfiddle.net/ambiguous/sEvv5/
你可能需要根据你的电脑的速度来调整10000。
您需要做的是在打开
#loading
和开始渲染昂贵视图之间将控制权交还给浏览器。例如:演示:http://jsfiddle.net/ambiguous/qd9Ly/
在您的情况下,请尝试将
// this changes the url and then the view is called.
部分放入setTimeout
。