gpt4 book ai didi

javascript - 迭代 ember.js Handlebars 模板中的键值

转载 作者:行者123 更新时间:2023-12-03 00:44:19 24 4
gpt4 key购买 nike

我有一个 JavaScript 对象

this.attributes = {
key: value,
// etc..
}

我想迭代它并输出 key:value

这是我的解决方案:

import Ember from 'ember';

export default Ember.Component.extend({
init() {
this._super(...arguments);
this.attributes = {
'SKU': '123',
'UPC': 'ABC',
'Title': 'Hour Glass'
}

},

ProductAttributes: Ember.computed('attributes', function() {

var attribs = this.get('attributes');
var kvp = Object.keys(attribs).map(key => {
return {
'attribute_name': key,
'attribute_value': attribs[key]
};
});
return kvp;
})});

我想出的模板:

{{#each ProductAttributes as |attribute|}}
{{attribute.attribute_name}} : {{attribute.attribute_value}}
{{/each}}

我对这个解决方案并不满意,因为它看起来很麻烦:首先我将对象转换为具有非动态键 attribute_nameattribute_value 的辅助对象数组,然后我直接在模板中引用非动态名称。

它工作正常,但有更好的方法吗?

最佳答案

我对此的建议与您在问题解释中已经描述的解决方案没有什么不同;但我的建议将为您提供一种更可重用且更each-in helper-like 的方法:

如何使用名为 each-in-component 的位置参数创建一个无标记上下文组件,并将所有计算属性定义移动到该组件。我使用的是 Ember 2.x 语法,但我猜 Ember 1.x 不会有太大不同;所以该组件将是某物。像:

import Ember from 'ember';

export default Ember.Component.extend({
objectProperties: Ember.computed('object', function() {
let object = this.get('object');
return Object.keys(object).map(key => {
return {
'key': key,
'value': Ember.get(object, key)
};
});
}),

tagName: ''
}).reopenClass({
positionalParams: ['object']
});

相应的组件模板将生成计算属性数组:

{{#each objectProperties as |objectProperty|}}
{{yield objectProperty.key objectProperty.value}}
{{/each}}

现在您可以像常规 each-in 一样使用该组件; Ember 1.x 中不存在。

{{#each-in-component attributes as |key value|}}
{{key}} : {{value}}<br>
{{/each-in-component}}

采用这种方法;您可以多次重复使用同一个组件,并且您不希望在自己的组件中使用的代码将位于 each-in-component 中。我已经完成了我的解决方案,以在下面的 twiddle 中说明它的实际情况。 。我希望它能起作用。

关于javascript - 迭代 ember.js Handlebars 模板中的键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53309437/

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