Javascript 嵌套dom repeat中数组映射的更改通知
我正在尝试向数组映射中添加一些内容,但值绑定没有接收到更改:-( 我有这样的想法:Javascript 嵌套dom repeat中数组映射的更改通知,javascript,polymer-2.x,Javascript,Polymer 2.x,我正在尝试向数组映射中添加一些内容,但值绑定没有接收到更改:-( 我有这样的想法: _itemsForDay(day, dayDeals) { return !!dayDeals.base ? dayDeals.base.find(x => x.day == day.key).deals : []; } 属性:{ 交易:{ 类型:对象, 通知:正确, 值:函数(){ 返回{ 项目:{ “星期一”:[], “星期二”:[], “星期三”:[], “星期四”:[], “星期五”:[]
_itemsForDay(day, dayDeals) {
return !!dayDeals.base ? dayDeals.base.find(x => x.day == day.key).deals : [];
}
属性:{
交易:{
类型:对象,
通知:正确,
值:函数(){
返回{
项目:{
“星期一”:[],
“星期二”:[],
“星期三”:[],
“星期四”:[],
“星期五”:[],
“星期六”:[],
“星期日”:[]
}
}
},
},
工作日:{
类型:数组,
值:函数(){
返回[
{“文本”:“蒙塔格”,“键”:“星期一”},
{“text”:“Dienstag”,“key”:“星期二”},
{“文本”:“Mittwoch”,“键”:“星期三”},
{“文本”:“Donnerstag”,“键”:“星期四”},
{“文本”:“Freitag”,“key”:“星期五”},
{“文本”:“Samstag”,“key”:“星期六”},
{“text”:“Sonntag”,“key”:“SUNDAY”}
]
},
},
},
然后我使用嵌套的dom repeat来呈现元素
\u itemsForDay:函数(日,映射){
const data=map[day.key];
返回数据;
}
但当我添加元素时,它不会被重新绘制,我尝试了许多notifyPath变体,但它不会呈现新元素:-(
这是我尝试组合成一个:
添加:函数(e){
day=e.model.day.key;
此.push(“交易.项目”+日,
{
描述:“Bla”,
价格1:“23,45欧元”,
价格2:“43,21欧元”,
图像ID:1
}
);
此.notifyPath(“工作日”);
此.notifyPath(“工作日。*”);
this.notifyPath(“weekDays.splice”);
此.notifyPath(“deals.items.*);
此.notifyPath(“deals.items.*);
this.notifyPath(“deals.items.splice”);
this.notifyPath(“deals.items.+day”);
此.notifyPath(“deals.items.+day+”*);
this.notifyPath(“deals.items.+day+.splice”);
此.notifyPath(“工作日。*”);
console.log(“长度:+this.deals.items[day].Length”)
},
我如何确保映射键的内容被重新提交(也可以重新提交整个映射,我不在乎)
模板如下所示:
_itemsForDay(day, dayDeals) {
return !!dayDeals.base ? dayDeals.base.find(x => x.day == day.key).deals : [];
}
描述:[[项目说明]]
IMG:[[item.imageId]]
[[deals.price1标签]]:[[item.price1]]
[[deals.price2Label]]:[[item.price2]]
+
有趣的是,当我删除外部循环并使用固定的工作日时,它可以工作:
描述:[[项目说明]]
IMG:[[item.imageId]]
[[deals.price1标签]]:[[item.price1]]
[[deals.price2Label]]:[[item.price2]]
+
这将拾取更改并渲染新项目,但随后我必须复制内部部分几次,这远远不够理想。slack channel中的ZeeWolf有一个不错的主意,效果很好: 创建新属性:
dayLists:{
类型:数组,
computed:“_ComputeDayList(deals.items.*)”
}
添加计算方法:
\u computeDayLists:function(){
返回此.weekDays.map(day=>{
const dayKey=day.key;
const items=this.deals.items[dayKey];
console.log(“为“+dayKey+”#“+items.length+”items找到”);
返回{
键:dayKey,
项目:项目
}
});
},
更新模板:
描述:[[项目说明]]
IMG:[[item.imageId]]
[[deals.price1标签]]:[[item.price1]]
[[deals.price2Label]]:[[item.price2]]
+
添加:函数(e){
const day=e.model.item.key;
此.push(“交易.项目”+日,
{
描述:“Bla”,
价格1:“23,45欧元”,
价格2:“43,21欧元”,
图像ID:1,
新:真的
}
);
console.log(“长度:+this.deals.items[day].Length”)
},
解释
内部循环不知何故没有接收到更改,因此这种方法使用依赖于映射项内容的计算列表(使用.*启用此功能)。当其中发生更改时,将重新绘制列表。
重要的是没有它的可变数据,这是行不通的
做一个