gpt4 book ai didi

javascript - 父组件中的 Ember 数据更改未反射(reflect)在 UI 上

转载 作者:行者123 更新时间:2023-12-03 02:13:07 24 4
gpt4 key购买 nike

我有一个父组件,它有一个 Accordion 面板(具有多个/动态行数)

{{#my-accordion accordionPanels=accordionPanels as |accordion| }}
{{my-details-row section=accordion.props.section removeRow='removeRow'}}
{{/my-accordion}}

对应的JS如下;

accordionPanels: function() {
var accordionPanels = [];
var self = this;
var myRows = this.get('section').myRows;
myRows.forEach(function(myRow) {
accordionPanels.pushObject({
panel: {
name: myRow.rowId,
props: {
section: myRow
}
}
});
});

return accordionPanels;
}.property('section.myRows'),

actions: {
removeRow: function(row){
var numberContainers = this.get('section').myRows.length;
for (var i = 0; i < numberContainers; i++){
if(this.get('section').myRows.contains(row.name)){
console.log("row found!");
this.get('section').myRows.removeObject(row.name);
}
}
},
}

子组件(my-details-row)代码如下

actions: {
removeRow: function(row){
this.sendAction('removeRow', row);
}
}

child 的hbs如下;

<div class="dataBlockItem">
{{my-field field=(field-from-section section "SECTION_NAME" "FIELD_NAME") }}
</div>
{{my-button label="Remove" action="removeRow"}}

现在,当单击“删除”按钮时,我希望删除相应的行。虽然我确实得到了父级的操作(从子级传递过来),即使在执行该行之后

this.get('section').myRows.removeObject(row.name);

UI 未更新(即父组件中的数据更改不会反射(reflect)在子组件中)

我是否需要编写额外的代码/逻辑才能反射(reflect) UI 上的更改?

最佳答案

您走在正确的道路上。您应该能够使用关闭操作来帮助简化连接父组件和子组件操作。请在下面的链接中查看下面的代码和一个非常基本的示例 Ember Twiddle。另外,您可能已经看到了这一点,但为了以防万一,这里有一个指向 Ember.js 指南的链接,其中提供了组件操作的说明。 Ember Component Actions -version 2.15

父组件.hbs

{{#my-accordion accordionPanels=accordionPanels as |accordion| }}
{{my-details-row section=accordion.props.section removeRow=(action 'removeRow' accordion)}}
{{/my-accordion}}

父组件.js

--这里只需传递行对象本身即可删除行.removedObject(row)

actions: {
removeRow: function(row){
var numberContainers = this.get('section.myRows').length;
for (var i = 0; i < numberContainers; i++){
if(this.get('section.myRows').includes(row.name)){
console.log("row found!");
this.get('section.myRows').removeObject(row);
}
}
},
}

子组件.hbs

--此处将 removeRow 操作绑定(bind)到按钮组件的单击事件

<div class="dataBlockItem">
{{my-field field=(field-from-section section "SECTION_NAME" "FIELD_NAME") }}
</div>
{{my-button label="Remove" click=removeRow}}

子组件.js

--此处不必定义 removeRow 函数。

actions: {
// No need to define the removeRow function
}

Example Ember Twiddle --using ember.js@2.2.2 to show the rough compatibility of the above approach

关于javascript - 父组件中的 Ember 数据更改未反射(reflect)在 UI 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472613/

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