Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套dom repeat中数组映射的更改通知_Javascript_Polymer 2.x - Fatal编程技术网

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”) }, 解释

内部循环不知何故没有接收到更改,因此这种方法使用依赖于映射项内容的计算列表(使用.*启用此功能)。当其中发生更改时,将重新绘制列表。 重要的是没有它的可变数据,这是行不通的

做一个