【发布时间】:2020-02-28 20:26:51
【问题描述】:
我在 salesforce.stackexchange.com 上发布了同样的问题,下面是链接
但是在 cmets 中,人们认为这与 salesforce 关系不大,它更像是一个 Javascript 的东西,所以我在这里发布相同的内容,请从 html 和 js 的角度看一下并提出建议。
HTML 语法似乎不同,因为它是 salesoforce 的闪电网络组件而不是 angular,还请帮助我理解 angular 中的相同行为,我将在 salesforce 中相应地进行操作
在下面的 html 代码中,我正在迭代 2 个列表 linItemData(11 条记录) 和 studyData(20 条记录)
<table class="slds-table slds-table_cell-buffer slds-table_bordered">
<thead>
<tr class="slds-line-height_reset">
<template if:true={studyData}>
<template for:each={studyData} for:item="sData">
<th key={sData}>
<div class="tablename slds-p-bottom_medium"></div>{sData.Visit_Name__c}
</th>
</template>
</template>
</tr>
</thead>
<tbody>
<template if:true={lineItemData}>
<template for:each={lineItemData} for:item="sLineItem">
<tr key={sLineItem}>
<template for:each={studyData} for:item="sData">
<td key={sData.Id}>
<lightning-input variant="label-hidden" class="fieldSize" type="number" step="0.01"
label="visitValue" data-key={sData.Id} onchange={visitValueChange} placeholder="00.00">
</lightning-input>
</td>
</template>
</tr>
</template>
</template>
</tbody>
</table>
我得到了一个预期的结果,其中包含 UI 上所有必需的输入字段,如下所示:
现在我需要获取所有 v20 的输入值,例如 v1(第一列名称)应该有 11 个输入记录的数组。
JS如下:
visitValueChange(event) {
this.studyData
.find(item => item.Id === event.currentTarget.dataset.key)
.visitValue = event.target.value;
}
我已经尽我所能,但 visitValue 只能保存 1 个最近的值,例如,如果我在第一个输入字段添加 1,在第二个输入字段添加两个,在第三个添加三个等等,然后我点击一个正在调用的按钮用于查看 studyData 数组的 JS 函数,但它只有最近的值,即 3 不是所有输入的 1,2 和 3 值,并且要求在所有列的所有 11 个输入字段上添加一个包含所有输入值的数组. 请帮助我提出任何解决方法。
【问题讨论】:
-
这个问题被标记为 Angular,但
<template if:true={lineItemData}>的语法看起来不像 Angular,if:true和单个花括号都不是。看起来也不像我看到的 React。这到底是什么> -
@kshetline,我很抱歉。我已经更新了我的问题,请提出任何解决方法
-
如果可能的话,请让我知道如何在 Angular 中做到这一点,我会在 salesforce 中相应地做到这一点。
-
为此,您必须跟踪与列对应的输入字段并迭代字段以获取输入。
-
能否提供一个例子?
标签: javascript html arrays salesforce-lightning