检测何时填充了hasMany属性而没有结果
Detecting when a hasMany property has been populated with no results
我想做的事情似乎很简单,但我不太知道该怎么做。
我使用Emberjs 2.8.
我有以下具有async: true
属性的模型:
models/my-model.js
import DS from 'ember-data';
export default DS.Model.extend({
childModels: DS.hasMany('otherModel', {async: true})
});
我有一个组件,显示这些模型之一:
/components/my-component.js
import Ember from 'ember';
export default Ember.Component.extend({
theModel: // model of type my-model here
})
my-model.childModels
可能没有任何记录。我想做的是在模板中显示一个"没有找到孩子"的消息,如果是这样的话,但我只想在之后做这个对服务器进行异步调用并返回一个空响应。所以我希望模板看起来像这样:
templates/components/my-component.hbs
<div>
{{#if theModel.childModels.length == 0}}
// display message saying there are no children
{{else}}
{{#each theModel.childModels as |child}}
// do something
{{/each}}
{{/if}}
</div>
棘手的部分是知道关系是否已经从服务器填充。我不能只是检查.length == 0
,因为在异步调用之前这是真的,我不希望DOM不必要地来回切换。我需要的是像theModel.childModels.isLoaded
的东西,但通过查看文档后,我不确定如何实现这一点。
谁能建议一种方法来做到这一点?任何建议都将不胜感激。谢谢!
好吧,我现在觉得自己很傻,因为我找到了答案,它毕竟是在文档中。PromiseManyArray
使用有isPending
属性的PromiseProxyMixin。所以我可以创建一个计算属性,像这样:
childModelsEmpty: Ember.computed('theModel.childModels', function () {
return !this.get('theModel.childModels.isPending') && this.get('theModel.childModels.length') === 0;
}),
这将告诉我服务器是否被击中并且返回空响应。
相关文章:
- json-api和错误结果:无法读取属性'长度'的未定义
- HTML
“width” 属性在不同的浏览器中产生不同的结果 - TypeError:无法读取属性'结果'的未定义
- Sequelize是在筛选属性时对结果进行分组
- _.find 是否返回对对象的引用?如何正确设置结果的属性
- 车把JS使用另一个属性的结果作为其他地方的名称
- 比较属性时出现奇怪的结果
- 从 Webix 中结果对象的属性加载数据
- 访问 Jquery 选择器作为对象属性,意外结果
- 正则表达式第一个结果($ 1)替换为变量的属性
- 如何使用 JQuery 进行 POST、检索结果以及使用结果来设置对象属性
- 将对象属性设置为排序结果而不进行排序
- node.js process.env:将 process.env 属性分配给字符串类型中的未定义结果
- html 属性中的引号被标记为 ”来自元素.html()的结果
- 不会将 aria 属性添加到结果中
- 无法从结果 getComputedStyle 中获取边距属性的值
- 为什么json结果显示一个属性的NaN
- 将“this”传递给访问其属性的函数会给出未定义的结果
- 如何根据多个数据属性筛选搜索结果
- 如何访问 neo4j 结果属性