假设我使用带有Durandal的标准SPA项目。路由是使用 pushState:true 。 一切都很顺利。
然而
我想生成完全准备好的页面(即在服务器上生成(例如,ASP.NET MVC))(用于SEO优化,以及最小化流量)。即, 页面生成不是这里的事情 :我只是使用服务器路由并生成适当的页面 - 而不是问题。 (例如,'mydomain.com/about/'页面)。
一切都很棒到目前为止 。
但是
现在,当页面加载时, Durandal 显然识别“关于”页面,再次开始从服务器加载 (在缓存的情况下,它不会,但如果我需要实际数据,我的服务仍然会获取数据,这是额外的请求+时间)。
所以,问题是我如何阻止重新加载和 简单地将ViewModel绑定到已经存在的HTML (已经在服务器上呈现)并且是当前加载页面的一部分)?
(只是为了澄清它一次:主要是防止在启动时重复加载页面)
谢谢!
答案 0 :(得分:0)
您可以尝试自定义viewEngine
;特别是createView
方法。
实际上,您必须预先检查您的视图是否已加载,然后返回一个解决您的视图的延迟声明;否则,从createView
返回默认值。这些方面的东西:
define([
"jquery",
"durandal/viewEngine"
],
function($, viewEngine) {
var defaultCreateView = viewEngine.createView;
viewEngine.createView = function(viewId) {
if (viewId == "about") {
// Some jQuery expression to find your view
var $about = $("#about");
// Emulate what createView would have done when the view was loaded
$about.setAttribute("data-view", viewId)
// Return the view element as a resolved promise
return $.when($about);
}
// View is not loaded - defer to default createView implementation.
return defaultCreateView.call(this, viewId);
};
});