aurelia repeat.for 中的绑定问题
Binding issue in repeat.for in aurelia
我有一个我填充的卡片列表,当我点击每张卡片时,我想要获取并显示为该卡片显示的正确项目。
我面临的问题是,当我 return 一个数组时,它没有将正确的项目绑定到特定的卡片。
这是我的HTML
<div repeat.for="Grouping of categoryItems">
<div class="row">
<div class="col s12 m3 l3">
<div class="card blue-grey darken-1">
<div class="card-content" style="padding:10px">
<span class="card-title white-text truncate">${Grouping.name}</span>
<a if.bind="Grouping.hideDetails" class="btn-floating halfway-fab waves-effect waves-light" click.delegate="Activate(list, Grouping)"><i class="material-icons">add</i></a>
</div>
</div>
</div>
</div>
<div repeat.for="categoryGroupingTypes of categoryItemTypes">
<div class="row" if.bind="!Grouping.hideDetails">
<div class="col" style="position:absolute;padding:5%">
<div class="rotate-text-90-negative">
<span class="blue-grey-text"><b>${categoryGroupingTypes.name}</b></span>
</div>
</div>
<div repeat.for="item of categoryItemsTypes.items" class="col s12 m3 l3 ">
<div class="card-content">
<span class="card-title white-text truncate">${items.Name} ${items.Quantity}</span>
</div>
</div>
</div>
</div>
</div>
</div>
我的老师
async Activate(list: ListModel[], grouping: any) {
this.categoryItemsTypes = await this.getTypes(list);
let result = this.categoryItem.filter(x => x.name == grouping.name)
if (result) {
grouping.hideDetails = false;
}
}
所以this.categoryItemsTypes有以下数组
0: {name: "Clothes", items: Array(3)}
1: {name: "Shoes", items: Array(2)}
因此,当页面加载时,它会按如下方式加载卡片
然后当我点击“衣服”时
我只希望它加载与衣服关联的数组,如果单击“鞋子”,则只按如下方式加载该数组
但是我上面的代码目前发生的情况如下
这一行是我绑定项目的地方
repeat.for="item of categoryItemsTypes.items"
如何将项目绑定到正确的 ${Grouping.name},如图 2 所示?
您的方向是正确的,但尚未完成。
您应该更喜欢 aurelia 绑定基础知识而不是数组赋值,后者效果不佳,因为未观察到数组赋值。
通常,当用一组新元素填充数组时,您应该更喜欢:
destarray.splice(0, destarray.length, ...sourcearray);
超过
destarray = sourcearray;
因为aurelia默认观察到前者而后者不是。
在这里,我在沙盒上复制了您的代码的简化版供您查看:
祝福。
我有一个我填充的卡片列表,当我点击每张卡片时,我想要获取并显示为该卡片显示的正确项目。 我面临的问题是,当我 return 一个数组时,它没有将正确的项目绑定到特定的卡片。
这是我的HTML
<div repeat.for="Grouping of categoryItems">
<div class="row">
<div class="col s12 m3 l3">
<div class="card blue-grey darken-1">
<div class="card-content" style="padding:10px">
<span class="card-title white-text truncate">${Grouping.name}</span>
<a if.bind="Grouping.hideDetails" class="btn-floating halfway-fab waves-effect waves-light" click.delegate="Activate(list, Grouping)"><i class="material-icons">add</i></a>
</div>
</div>
</div>
</div>
<div repeat.for="categoryGroupingTypes of categoryItemTypes">
<div class="row" if.bind="!Grouping.hideDetails">
<div class="col" style="position:absolute;padding:5%">
<div class="rotate-text-90-negative">
<span class="blue-grey-text"><b>${categoryGroupingTypes.name}</b></span>
</div>
</div>
<div repeat.for="item of categoryItemsTypes.items" class="col s12 m3 l3 ">
<div class="card-content">
<span class="card-title white-text truncate">${items.Name} ${items.Quantity}</span>
</div>
</div>
</div>
</div>
</div>
</div>
我的老师
async Activate(list: ListModel[], grouping: any) {
this.categoryItemsTypes = await this.getTypes(list);
let result = this.categoryItem.filter(x => x.name == grouping.name)
if (result) {
grouping.hideDetails = false;
}
}
所以this.categoryItemsTypes有以下数组
0: {name: "Clothes", items: Array(3)}
1: {name: "Shoes", items: Array(2)}
因此,当页面加载时,它会按如下方式加载卡片
然后当我点击“衣服”时 我只希望它加载与衣服关联的数组,如果单击“鞋子”,则只按如下方式加载该数组
但是我上面的代码目前发生的情况如下
这一行是我绑定项目的地方
repeat.for="item of categoryItemsTypes.items"
如何将项目绑定到正确的 ${Grouping.name},如图 2 所示?
您的方向是正确的,但尚未完成。 您应该更喜欢 aurelia 绑定基础知识而不是数组赋值,后者效果不佳,因为未观察到数组赋值。 通常,当用一组新元素填充数组时,您应该更喜欢:
destarray.splice(0, destarray.length, ...sourcearray);
超过
destarray = sourcearray;
因为aurelia默认观察到前者而后者不是。
在这里,我在沙盒上复制了您的代码的简化版供您查看:
祝福。