Ember.js加载模板上的Per-Model Promise状态
Per-Model Promise status on Ember.js loading template
我有一个Ember.js(2.3)SPA。在应用程序的一部分的父路径中,我在许多不同的模型类型上加载了相当多的数据(~3.5MB):
App.ParentRoute = Ember.Route.extend
model: ->
Ember.RSVP.hash
foos: @store.findAll "foo"
bars: @store.findAll "bar"
bazes: @store.findAll "baz"
quxes: @store.findAll "qux"
我想做的是用每个承诺的状态信息来增强我现有的父加载模板(目前只是一个spinner.gif)。因此,当模板第一次渲染时,它显示了每种模型类型:
[ ] Loading Foos...
[ ] Loading Bars...
[ ] Loading Bazes...
[ ] Loading Quxes...
然后,当RSVP.Hash中的每个Promise解析时,它显示为进度的指标:
[ ] Loading Foos...
[X] Loaded 16 Bars
[ ] Loading Bazes...
[X] Loaded 213 Quxes
我看到了Route loading
操作的文档,但它使用了一个控制器,文档似乎表明控制器被弃用(我还没有在项目中使用任何控制器)。
如何从加载模板中的model()访问Promise状态
不幸的是,似乎没有办法通过加载子状态来实现您想要的。使用Ember.RSVP.Hash
将等待所有这些承诺得到解决,然后一次呈现所有内容。为了更好地控制个人承诺的呈现方式,我认为您正在寻找的是PromiseProxyMixin
。以下是使用中的PromixeProxyMixin
示例:http://blog.ksol.fr/promise-aware-controllers-and-components/
但这个Ember插件使以这种方式处理承诺变得更加容易:Ember延迟内容
您需要重组您的模型挂钩,以打破Ember.RSVP.Hash
中的这些异步调用,从而分别调用它们,这样它们就可以在不同的时间独立地进行解析,这样您就可以逐一跟踪每个promise的状态。
例如,您可以有一个模型挂钩,它返回如下内容:
model() {
return {
foos: @store.findAll "foo",
bars: @store.findAll "bar",
bazes: @store.findAll "baz",
quxes: @store.findAll "qux",
}
}
然后,使用ember-deferred-content
:
{{#deferred-content model.foos as |foos|}}
{{#foos.pending}}
[ ] Loading Foos...
{{/foos.pending}}
{{#foos.fulfilled as |f|}}
[x] Loaded {{f.length}} Foos
{{/foos.fulfilled}}
{{/deferred-content}}
并对bar
、baz
和qux
重复。
2016年4月2日更新:
我最近了解了另一个很棒的插件,它可以用于类似的效果:ember-promise助手。该附加组件的作者fiftanley也是Ember Data的核心团队成员。
- 使用promise和mongoose对文档进行排序
- Ember Data DS.Model's set函数不起作用
- 测试Angular Service解决错误回调中的promise
- 节点协同与生成器和Promise并行流量控制
- 根据是否解析了 Promise 从函数返回值
- 将一个方法转换为promise:Nodejs
- 函数在promise被解析后被调用,但Jasmine未通过测试.为什么?
- C#asp.net mvc Set CheckBoxFor已检查的具有Model Value的属性
- js promise没有正确关闭
- Angularjs使用“;这个“;promise内的关键字回调
- AngularJS和promise值在调用本地函数时的效果-未定义
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 以同步方式获取Javascript Promise的值
- Rails将JavaScript对象存储到Model的有效方式
- NodeJS和pg promise,捕获PostgreSQL异常
- AngularJS使用http进行promise处理
- Ember.js加载模板上的Per-Model Promise状态
- 如何在SailsJS/Waterline中使用Model.query()和promise
- AngularJS - ng:model - Field在绑定$q promise时是只读的
- 如何重构Model.findOne(…)块,使其更具promise (SailsJS 0.9.x)