使用没有SPA的BreezeJS

时间:2013-10-31 20:16:32

标签: javascript .net asp.net-mvc entity-framework breeze

我最近一直在尝试使用breezejs,并且考虑将它用于个人和工作中的一些项目,因为我喜欢它。我知道现在风靡一时的是单页应用程序而且我明白了,但是假设您不想引入新的路由框架并且只是使用.NET MVC默认路由引擎。每次有POST /重定向时,您将失去元数据和其他实体的breeze实体管理器的客户端缓存功能。

其中一个问题是我们为每个请求提供了大量元数据(.5mb)。现在,如果在重定向之前在客户端有任何其他请求,则缓存该元数据并且一切正常。除了静态列表之外,我还试图避免为每个视图下载元数据,我也会在实体管理器中缓存这些静态列表。我知道可以通过制作更小的对象图来优化元数据,但是我们不要关注它。

我想到的一件事是将元数据存储在localStorage中,然后在页面加载时检索它。

function exportMetadata() {
   var metadata = emanager.metadataStore.exportMetadata();
   window.localStorage.setItem('somename', metadata);
}
function importMetadata() {
   var metadata = window.localStorage.getItem('somename');
   var mstore = new breeze.MetadataStore();
   mstore.importMetadata(metadataFromStorage);
   manager.metadataStore = mstore;
}

虽然这有效(并且适用于具有不同语法的静态列表),但它感觉很乱,并且似乎违背了库的使用方式。我不禁想到BreezeJS与SPA架构相结合,以便利用它所写的所有功能。也许我在考虑错误的方式?有没有关于如何在SPA之外使用BreezeJS的建议或示例?

1 个答案:

答案 0 :(得分:2)

Breeze适用于单页应用程序(SPA),它们被认为在页面刷新之间具有较长的用户会话。我不确定为什么你不想要客户端路由框架(例如,Durandal或Angular)。但肯定会发生你不时想要切换页面的事情。

当你的应用程序实际上是一个较小的模块化应用程序的联盟 - 每个都是独立开发和维护的 - 并且用户从一个模块跨越“桥梁”到另一个模块时,这甚至是推荐的做法

您的解决方案正是我所做的:从浏览器本地存储中存储和恢复元数据。您可以将它与存储/恢复元数据和(大多数)静态引用列表实体组合在一个序列化缓存中......正如您所说。

采用这种做法对所有IMO来说都不是苛刻的。 我们希望Breeze以这种方式工作。事实上,这是为“常规”SPA提供更快的启动和加载时间的好方法。

我很想知道为什么你认为这是“hacky”。我对你对Breeze可以为你做什么的想法感兴趣。什么是理想的世界?

相关问题