gpt4 book ai didi

ember.js - Ember 数据显示模板中 hasMany 关系的长度,无需下载该关系的所有对象

转载 作者:行者123 更新时间:2023-12-05 00:56:57 24 4
gpt4 key购买 nike

我有一个产品型号有很多价格。我有一个页面显示产品名称、代码以及它的价格数量,即:

<tbody>
{{#each model as |product id|}}
<tr>
<td>{{#link-to "product" product}}{{product.name}}{{/link-to}}</td>
<td>{{product.code}}</td>
<td>{{product.prices.length}}</td>
</tr>
{{/each}}
</tbody>

我的问题是通过使用 product.price.length Ember 数据发出数以千计的请求以通过 id 获取价格。我不需要有关此页面上实际价格的任何信息。如何在没有 Ember 数据下载所有价格的情况下使用 length 属性?

模型/product.js:
export default DS.Model.extend({
code: DS.attr('string'),
name: DS.attr('string'),
prices: DS.hasMany('price', {async: true})
});

模型/价格.js
export default DS.Model.extend({
product: DS.belongsTo('product', {async: true}),
value: DS.attr('number'),
minUnits: DS.attr('number'),
maxUnits: DS.attr('number')
});

最佳答案

在 ember slack 房间聊天后,我有两个当前的解决方案,一个后端,一个前端。

前端

从 Ember 数据 2.5 开始,发布帖子 http://emberjs.com/blog/2016/05/03/ember-data-2-5-released.html 中详细介绍了一个新的“ds-references”功能。 .

有了这个,这里的解决方案是添加一个类似于以下内容的计算:

priceCount: Ember.computed('prices.[]', function() {
if (this.hasMany('prices').value() === null) {
return 0;
}

return this.hasMany('prices').ids().length;
}

评论中报告说,上述内容可能会触发后端请求。作为替代方案,您可以添加一个辅助函数 totalHasMany带代码
return param[0].hasMany(param[1]).ids().length
并在模板中使用 (totalHasMany product 'prices') ,我已经成功地在一个应用程序中使用了它。

后端

看看使用元数据返回总价格。所以在 Json Api 设置中
"meta": {
"prices-total": 123
}

http://jsonapi.org/format/#document-meta了解更多信息。

https://guides.emberjs.com/v2.1.0/models/handling-metadata/也可能对那些使用标准 json 的人有用。

感谢 kitler 和 locks 在 slack 中的上述建议。

关于ember.js - Ember 数据显示模板中 hasMany 关系的长度,无需下载该关系的所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35405360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com