繁体   English   中英

骨干网将客户端渲染与服务器端渲染区分开

[英]Backbone differentiate client side rendering from server side rendering

我想允许用户直接从服务器或使用链接来请求我网站的网页,这将由Backbone的路由器处理。

当用户直接从服务器请求网页时,将提供整个页面(带有html,head,body,stylesheets和脚本)。

另一方面,当用户通过单击链接来请求网页时,仅请求页面的相关部分,然后将其插入正确的位置,并且网页的其他元素保持不变。

通过插入正确的位置,我的意思是在到达特定路线后创建视图。 然后初始化视图,并调用其render方法获取网页的相关部分,然后使用$el.html(content)将其插入DOM中。

但是我不想在直接从服务器获取网页时调用视图的render方法,因为已经渲染了所有需要的内容,并且重新渲染它只会导致某些ui闪烁效果。

有什么通用的方法可以让View知道它们不应该渲染自己,因为已经从服务器获取了完全渲染的网页?

每次单击链接时,我都可以将诸如clientSideNavigation = true的标志传递给路由器,然后路由器会将其传递给视图,以便他们知道是否渲染内容。

但是,当用户使用后退/前进按钮时,它不起作用。

我还可以检查该页面的$el中是否应该存在某些特定元素-例如,如果我有一个名为CatsView的视图, CatsView可以检查#cats-box是否在其$el元素中。 但是它涉及更多的DOM操作,我希望避免。

具有根视图,并具有占位符以用于子视图。 第一次渲染来自服务器的完整页面。

为了在单击链接时呈现视图的一部分,您可以在根视图上定义相应的事件哈希。

让事件处理程序回调调用一个控制器(自定义js对象),该控制器执行加载数据,构造视图并将数据传递给它的工作。

最后,还使用带有{trigger:false}的Router navigation( http://backbonejs.org/#Router-navigate )方法将URL更新为相应的URL,这样,在刷新后,用户将返回同一视图

在指定URL的路由器回调中,通过传递一个标志在控制器对象上调用相同的方法,以使功能同步,并且还使用该标志,可以防止调用路由器导航方法,因为它不是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM