在 Backbone.js 中,模型加载和保存是通过 ajax 调用完成的。但是,是否有任何最佳实践可以在页面加载时加载初始集合而不必通过 ajax 将其拉下来?我正在尝试尽可能多地预先进行服务器端渲染。
过去,我使用包含初始数据状态的 json 字符串的 javascript 变量为 html 播种,以便可以在服务器端呈现它,但我不确定这是否是一个好习惯。
在 Backbone.js 中,模型加载和保存是通过 ajax 调用完成的。但是,是否有任何最佳实践可以在页面加载时加载初始集合而不必通过 ajax 将其拉下来?我正在尝试尽可能多地预先进行服务器端渲染。
过去,我使用包含初始数据状态的 json 字符串的 javascript 变量为 html 播种,以便可以在服务器端呈现它,但我不确定这是否是一个好习惯。
不知道这是否一定是最佳实践,但是这种使用 json对象(不是您描述的 json字符串,对吗?)为 html 播种的方法当然是我进行初始加载的首选方式。不仅因为它消除了等待初始 AJAX 调用返回的延迟的(显而易见的)原因,而且还因为较少开放的连接释放了浏览器来加载其他东西(如 img src 或诸如此类),让你到 document.onLoad 稍微快一点。
建议在使用此方法时,将所述变量放在正文底部的脚本标记中(即不在头部部分),以使页面上的静态 html 元素有机会加载和呈现第一的。当 document.onLoad 触发时,json 数据就准备好了。
从Backbone docs开始,在脚本标签中初始化模型并不是一个坏习惯。在我当前的项目中,我决定只在内部设置普通对象window.projectData
,以便能够在外部 javascripts 中初始化 Backbone 模型。
<script>
;(window.projectData || (window.projectData = {})).modelName = {/* value */};
</script>
您选择的方法可能取决于您计划加载多少数据以及该数据将如何在页面中使用。
如果大多数所需数据最终不会最终呈现在页面上,那么将初始状态引导到 javascript 变量中可能不是一个糟糕的方法。
但是,如果数据与页面的呈现直接相关,您可能更愿意为主干应用程序的初始状态解析一个预渲染的 DOM。必须注意的是,这种解析会有些慢,尤其是对于大型数据集。
如果你最终选择解析预渲染的内容,我不久前组装了一个小型 jQuery DOM 解析器,它可能对将呈现的内容映射到 Backbone-ready 表单很有用。