Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Breeze js-如何从JSON字符串创建实体并将其导入Breeze缓存_Javascript_Json_Entity Framework_Asp.net Web Api_Breeze - Fatal编程技术网

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

Javascript Breeze js-如何从JSON字符串创建实体并将其导入Breeze缓存,javascript,json,entity-framework,asp.net-web-api,breeze,Javascript,Json,Entity Framework,Asp.net Web Api,Breeze,我正在一个使用breeze js、angular js、web API、实体框架等的移动单页网站上工作 为了优化站点,我将breeze元数据包含在一个包含站点所需的所有其他JavaScript的捆绑JavaScript中。理想情况下,我只希望浏览器请求index.html,它应该包含应用程序运行所需的所有内容,包括捆绑和缩小的内联样式和JavaScript 然而,正如breeze元数据对于站点的功能非常重要,因此嵌入到捆绑的JavaScript中一样,也必须存在一个复杂的实体(对于某些其他实体具

我正在一个使用breeze js、angular js、web API、实体框架等的移动单页网站上工作

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

然而,正如breeze元数据对于站点的功能非常重要,因此嵌入到捆绑的JavaScript中一样,也必须存在一个复杂的实体(对于某些其他实体具有一些深度导航属性),该实体也必须存在,站点才能完全发挥功能。我想把这个实体和它引用的所有实体也嵌入到绑定的JavaScript中。我该怎么做

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


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

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

看 及

这个电话看起来像这样

myEntityManager.createEntity("Employee", { lastName: Smith", firstName: "John" });
因此,在您的情况下,您可以尝试:

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

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

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

准备工作
  • 使用您希望在启动时可用的实体(和实体图)初始化
    EntityManager

  • 使用
    var exported=manager.exportEntities()导出为字符串。导出的
    字符串中嵌入了元数据,因此您不必单独将其删除。二对一

  • 将导出的
    的内容捕获到一个JavaScript文件中,作为脚本加载到index.html中。我的“捕获”过程通常只是显示在控制台中并对其进行刮取

用法 现在,当您需要它时:

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

  • 创建一个新的
    EntityManager
    (请记住以相同的dataservice端点为目标)

  • 导入脚本中捕获的实体:
    manager.importenties(launchData)

你可以走了

阅读EntityManager
exportEntities
importEntities
方法

例子 您可以在“Zza Node Mongo”的测试目录中看到此技术的一个变体

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

小心 你说

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

谨防过早优化

我很怀疑,通过在脚本文件中嵌入元数据和启动日期,您是否能够显著地缩短应用程序的启动时间。如果浏览器缓存这些脚本,可能会有一段时间。但这也有其自身的风险,并不是一个可靠的策略

您需要的数据必须以某种方式通过线路传输到客户端。加载脚本文件(即使是最小化的脚本文件)比通过web api AJAX调用从服务器上拉取元数据和启动数据(都是gzip)要快,这一点是不言而喻的

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


请做好心理准备,发现您辛苦获得的优化工作并没有改善启动时间。。。甚至可能让一些用户的情况变得更糟。

避开话题,但你觉得我在这里的评论如何@LenielMacaferi-Wow。我以前没见过那篇文章。下周我将与我们的团队进行内部讨论。这似乎好得难以置信。我会跟进的。