繁体   English   中英

Breeze js-如何从JSON字符串创建实体并将其导入到微风缓存中

[英]Breeze js - how to create an entity from a JSON string and import it into the breeze cache

我正在使用微风js,角度js,Web API,实体框架等的移动单页网站上工作。

为了优化站点,我将微风元数据包含在捆绑的JavaScript中,该JavaScript包含站点需要的所有其他JavaScript。 理想情况下,我只希望浏览器请求的是index.html,它应该包含应用程序需要运行的所有内容,包括捆绑式和缩小式嵌入式样式以及JavaScript。

但是,就像微风元数据对于站点正常运行非常重要,因此将其嵌入捆绑的JavaScript中一样,站点还必须存在一个必需的复杂实体(具有某些其他实体的深层导航属性)充分发挥作用。 我想将这个实体及其引用的所有实体也嵌入捆绑的JavaScript中。 我怎样才能做到这一点?

我总是可以创建一个JSON字符串来表示该实体及其引用的所有实体。 然后将该JSON字符串与其余字符串一起嵌入捆绑的JavaScript中。 但是,如何使用嵌入在JavaScript中的实体JSON字符串轻松地将此复杂实体导入微风实体系统? 还是有一个更好的解决方案,可以用复杂的实体预加载微风实体系统而不必从服务器请求该实体?

我还想避免编写服务器代码来吐出在客户端上创建实体的JavaScript。

最简单的方法是对EntityManager.createEntity调用使用“ initializer”参数。

请参阅http://www.breezejs.com/documentation/creating-entitieshttp://www.breezejs.com/sites/all/apidocs/classes/EntityManager.html#method_createEntity

这个电话看起来像这样。

myEntityManager.createEntity("Employee", { lastName: Smith", firstName: "John" });

因此,在您的情况下,您可以尝试:

var initialValues = JSON.parse(json);
myEntityManager.createEntity("Employee", initialValues);

根据您的用例,您可能还需要设置这个新创建的实体的'entityState'。

我经常使用以下技术来创建用于自动化测试的实体数据:

制备

  • 在启动时向EntityManager您想要的实体(和实体图)。

  • 导出为带有var exported = manager.exportEntities();的字符串var exported = manager.exportEntities(); exported字符串中嵌入了元数据,因此您不必分别将其降低。 二换一个!

  • 捕获exported到JavaScript文件的内容,该JavaScript文件将作为脚本加载到index.html中 我的“捕获”过程通常只是在控制台中显示并抓取。

用法

现在,当您需要它时:

  • 加载该JavaScript元数据+数据文件。

  • 创建一个新的EntityManager (请记住以相同的数据服务终结点为目标)。

  • 导入您在脚本中捕获的实体: manager.importEntities(launchData);

而且你很好。

阅读EntityManager exportEntitiesimportEntities方法。

在“ Zza-Node-Mongo”的测试目录中,您可以看到此技术的一种变体。

我个人不将数据与元数据合并,因此我使用“无元数据”选项导出。 我将元数据放在一个脚本中,将要加载的数据(通常是查找内容)放在一个单独的脚本中,并将两者都加载到index.html中

警告

你说

为了优化网站,我将微风元数据包含在捆绑的JavaScript中,该JavaScript包含网站需要的所有其他JavaScript。 理想情况下,我只希望浏览器请求的是index.html,它应该包含应用程序需要运行的所有内容,包括捆绑式和缩小式嵌入式样式以及JavaScript。

提防过早的优化

我相当怀疑您是否可以通过将元数据和启动日期嵌入脚本文件中来显着改善应用程序的启动时间。 如果浏览器缓存了这些脚本,则可能需要一段时间。 但这有其自身的风险,而且不是可靠的策略。

您想要的数据必须通过一种或多种方式通过有线方式传递给客户端。 加载脚本文件-甚至最小化的脚本文件-都不比通过Web api AJAX调用从服务器提取元数据和启动数据(都压缩)更快。

我描述的技术确实可以加快测试速度,因为我必须在每次测试之前重新创建元数据和启动数据。 我可以通过避免重复访问服务器来衡量性能提升。 第一次旅行我一无所获...相当于您的应用程序启动。

做好心理准备,发现您辛辛苦苦的优化工作并没有缩短启动时间……甚至可能使某些用户感到更糟糕。

暂无
暂无

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

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