В настоящее время я пытаюсь создать компонент, который будет принимать модель как этотЭмбер редактируемые рекурсивные вложенные компоненты
"values": {
"value1": 234,
"valueOptions": {
"subOption1": 123,
"subOption2": 133,
"subOption3": 7432,
"valueOptions2": {
"subSubOption4": 821
}
}
}
с каждым объектом рекурсивно создает новый компонент. Пока я создал этот компонент ветви и узла, и он отлично подходит для получения данных и их отображения, но проблема, с которой я сталкиваюсь, заключается в том, как я могу редактировать и сохранять данные. Каждый компонент имеет другой набор данных, поскольку он передается по его собственному дочернему объекту.
Js поворачивающих здесь: шаблон компонента https://ember-twiddle.com/b7f8fa6b4c4336d40982
дерево-ветви:
{{#each children as |child|}}
{{child.name}}
{{tree-node node=child.value}}
{{/each}}
{{#each items as |item|}}
<li>{{input value=item.key}} : {{input value=item.value}} <button {{action 'save' item}}>Save</button></li>
{{/each}}
дерево-ветви контроллер компонента:
export default Ember.Component.extend({
tagName: 'li',
classNames: ['branch'],
items: function() {
var node = this.get('node')
var keys = Object.keys(node);
return keys.filter(function(key) {
return node[key].constructor !== Object
}).map(function(key){
return { key: key, value: node[key]};
})
}.property('node'),
children : function() {
var node = this.get('node');
var children = [];
var keys = Object.keys(node);
var branchObjectKeys = keys.filter(function(key) {
return node[key].constructor === Object
})
branchObjectKeys.forEach(function(keys) {
children.push(keys)
})
children = children.map(function(key) {
return {name:key, value: node[key]}
})
return children
}.property('node'),
actions: {
save: function(item) {
console.log(item.key, item.value);
}
}
}); Компонент
дерево-узел:
{{tree-branch node=node}}
Любой, кто имеет какие-либо идеи о том, как я могу получить эту работу будет серьезным подспорьем, спасибо!
любой шанс вы могли бы разместить рабочий jsbin? – NicholasJohn16
Да, это https://ember-twiddle.com/b7f8fa6b4c4336d40982 –
Что вы подразумеваете под «экономией»? Вы хотите сохранить его как модель Ember Data или что? –