5

我正在开发一个使用微风进行数据访问的 SPA。我想尽快创建一个元数据实例,我想这将是完成初始化之后:

var manager = new entityModel.EntityManager(serviceName);

但是,实体管理器需要向 web api 控制器执行 ajax 请求以加载元数据,如果我manager.metadataStore.getEntityType("EntityName")在它完成之前尝试,我会得到:

Uncaught Error: Unable to locate an 'Type' by the name

我的问题是加载元数据时是否会触发事件?我浏览了文档,但似乎找不到它。

4

3 回答 3

5

没有事件,但您可以自己调用 MetadataStore.fetchMetadata 方法并在 promise 的“then”部分执行您的逻辑。

MetadataStore.fetchMetadata 方法由针对每个服务器的第一个查询在内部自动调用(如果尚未调用)。.

因此,只需在第一次查询之前自己调用 MetadataStore.fetchMetadata。

希望这是有道理的。

于 2013-01-03T21:24:03.067 回答
3

从 Breeze 1.4.16 开始,MetadataStore现在有一个metadataFetched事件,如下所述:http ://www.breezejs.com/sites/all/apidocs/classes/MetadataStore.html#event_metadataFetched

于 2014-07-14T20:05:27.797 回答
1

建议的解决方案的问题是 fetchMetadata 可能会失败......由于各种原因。如果失败是由于暂时的通信失败,那么下一个查询调用会获取元数据,并且应用程序将开始访问数据,而无需初始化 WRT 元数据所需的任何初始化(在我们的例子中是客户端验证)。在我们的例子中,除了没有验证之外,该应用程序似乎运行良好。

奇怪的是,这种情况经常发生。对 fetchMetadata 的调用失败,但后续查询成功。不会每次都发生,但会发生不止一点。

我们可以向系统添加一个状态,在 fetchMetadata 成功之前阻止其他数据访问,然后重试它直到成功。但是,这是很多工作。加载完成时触发的事件会好得多。

于 2013-12-09T12:32:05.100 回答