求助:Ignition Perspective中Asset_Insert数组更新逻辑异常问题
问题描述
在Ignition Perspective项目中修改表格单元格值时,Asset_Insert数组本该同步更新现有条目,但每次操作都会新增条目而非更新(该方法在提交/修改值回车时触发)。当前代码如下:
def runAction(self, event): col = event.column row = event.row BASE_ASSET_NAME = self.getSibling("Txt_Selected_BT").props.text plantName = self.props.data[0].Plant_Name.value assetInsert = self.custom.Asset_Insert if 'value' in self.props.data[row][col]: self.props.data[row][col]['value'] = event.value # Flag to check if we found the row to update updated = False # Iterate and update existing entry for i, item in enumerate(assetInsert): if item["ASSET_NAME"] == asset_data["ASSET_NAME"]: # Update existing entry assetInsert[i] = asset_data updated = True break # Append the asset_data if not updated if not updated: assetInsert.append(asset_data)
目前遇到的情况:仅表格只有1行时更新逻辑有效;多行时会先创建对应行数的对象,之后仅持续更新最后一个对象。
解决建议
1. 补全asset_data定义(核心问题)
代码中直接使用asset_data但未定义,这是匹配逻辑失效的关键。需要从当前修改的表格行提取数据,结合已有变量构建完整的asset_data对象:
# 在修改表格数据后,构建当前行对应的asset_data current_row = self.props.data[row] # 根据表格实际字段结构调整,确保ASSET_NAME是当前行的唯一标识 asset_data = { "ASSET_NAME": current_row["ASSET_NAME"]["value"], "Plant_Name": plantName, # 同步当前修改的列值 current_row[col]["key"]: event.value # 补充其他需要同步的字段 }
2. 修正匹配与更新逻辑
确保遍历assetInsert时,用当前行的唯一标识(asset_data["ASSET_NAME"])精准匹配,更新时替换为完整的最新数据:
updated = False for i, item in enumerate(assetInsert): if item["ASSET_NAME"] == asset_data["ASSET_NAME"]: assetInsert[i] = asset_data updated = True break
3. 触发Ignition数组变更识别(可选)
在Ignition Perspective中,直接修改数组元素可能无法触发UI或绑定更新,修改后重新赋值数组即可:
# 修改或新增完成后,重新赋值给custom属性触发变更 self.custom.Asset_Insert = assetInsert
4. 排查多行唯一标识问题
如果多行时仅最后一个对象被更新,大概率是asset_data["ASSET_NAME"]未对应每行唯一值(比如所有行复用了BASE_ASSET_NAME)。若单个ASSET_NAME不唯一,可改用复合条件匹配:
# 用ASSET_NAME+Plant_Name作为复合匹配条件 if item["ASSET_NAME"] == asset_data["ASSET_NAME"] and item["Plant_Name"] == asset_data["Plant_Name"]: assetInsert[i] = asset_data updated = True break
内容的提问来源于stack exchange,提问作者Uniquedesign
相关产品推荐
相关产品推荐

