Method --> Action --> Mutation --> State issue
Method --> Action --> Mutation --> State issue
我的函数应该使用来自自身的参数将 JSON 迭代插入到嵌套 JSON 的特定级别的每个元素中,正在复制返回的第一个对象并将其插入到每个嵌套参数中。请参阅下面的屏幕截图和代码以了解我在做什么。
基本上我在状态中有一个嵌套的 JSON 对象,并且需要使用 returns JSON 来自 API 然后是更新状态的突变。
问题出在我认为的突变中。我推断我的函数正在复制从 API 返回的第一个 JSON 对象。请参阅下面的 Action 和 Mutation 函数,以及 API 函数和 JSON 的结构。
http://api.capecodcommission.org/docs/index.html#sumofannualcapitaltotalsfortreatment
特定组件中的函数 运行 使用 v-for:
methods: {
costTotal () {
return this.updateFinTotals(this.treatment.treatmentId,this.costType.treatTotal,this.costType.financeOption,this.treatment.relativeStartYear,this.costType.finDur,this.costType.prinFor)
}
}
运行函数,查看JSON:
<td class="text-center">
{{ costTotal }}
{{ costType.annualized.sumOfAnnualCapitalTotals }}
</td>
V-for 循环:
<tbody>
<tr v-for="(index, costType) in treatment.costTypes | filterBy 'true' in 'financeable'" is="cost-type-table-row-finance" :cost-type="costType"></tr>
</tbody>
API函数:
getSumOfAnnualCapitalTotals (treatmentId, costToFinance, financeOption, relativeStartYear, financeDuration, principalForgivenessRate) {
let data = {
treatmentId: treatmentId,
costToFinance: costToFinance,
financeOption: financeOption,
relativeStartYear: relativeStartYear,
financeDuration: financeDuration,
principalForgivenessRate: principalForgivenessRate
}
return Vue.http.post(API_ROOT + 'sumOfAnnualCapitalTotalsForTreatment', data)
}
行动:从API拉取JSON,调度突变函数。
export const updateFinTotals = function ({ dispatch, state }, treatmentId, costToFinance, financeOption, relativeStartYear, financeDuration, principalForgivenessRate) {
api.getSumOfAnnualCapitalTotals( treatmentId, costToFinance, financeOption, relativeStartYear, financeDuration, principalForgivenessRate ).then(function (response) {
dispatch('UPDATE_ANNUALIZED', response.data)
}, function (response) {
console.log(response)
})
}
突变:用JSON更新状态。
UPDATE_ANNUALIZED (state, annualized) {
for (var i = 0; i < state.scenario.treatments.length; i++) {
for (var j = 0; j < state.scenario.treatments[i].costTypes.length; j++) {
state.scenario.treatments[i].costTypes[j]["annualized"] = annualized
}
}
}
编辑:下图
组件:http://i.imgur.com/lcS5Fgo.jpg
JSON 结构:http://i.imgur.com/AsANZOp.jpg
好吧,你的 API returns one 值(one 成本类型 一个治疗)
来自链接 API 文档的示例:
{"sumOfAnnualCapitalTotals":150374.9849625}
但您将其分配给 all 成本类型的 all 治疗,并在突变中使用 for 循环:
for (var i = 0; i < state.scenario.treatments.length; i++) {
for (var j = 0; j < state.scenario.treatments[i].costTypes.length; j++) {
state.scenario.treatments[i].costTypes[j]["annualized"] = annualized
}
}
你应该做的是将 treatmentID
和成本类型(我 sherlock-holmed,称为 costToFinance
)从动作传递到突变,然后过滤状态匹配对象,并仅更新:
UPDATE_ANNUALIZED (state, treadmentId, costToFinance, annualized) {
const treatment = state.treatments.find((t) => t.treatmentId === treatmentId)
const currCostType = treatment.costTypes.find((costType) => costType.Id === costToFinance)
currCostType.annualized = annualized
}
问题是您的 JSON 似乎没有任何用于 find
它的 costTypes 的 ID,但这需要您自己弄清楚。
我的函数应该使用来自自身的参数将 JSON 迭代插入到嵌套 JSON 的特定级别的每个元素中,正在复制返回的第一个对象并将其插入到每个嵌套参数中。请参阅下面的屏幕截图和代码以了解我在做什么。
基本上我在状态中有一个嵌套的 JSON 对象,并且需要使用 returns JSON 来自 API 然后是更新状态的突变。
问题出在我认为的突变中。我推断我的函数正在复制从 API 返回的第一个 JSON 对象。请参阅下面的 Action 和 Mutation 函数,以及 API 函数和 JSON 的结构。
http://api.capecodcommission.org/docs/index.html#sumofannualcapitaltotalsfortreatment
特定组件中的函数 运行 使用 v-for:
methods: {
costTotal () {
return this.updateFinTotals(this.treatment.treatmentId,this.costType.treatTotal,this.costType.financeOption,this.treatment.relativeStartYear,this.costType.finDur,this.costType.prinFor)
}
}
运行函数,查看JSON:
<td class="text-center">
{{ costTotal }}
{{ costType.annualized.sumOfAnnualCapitalTotals }}
</td>
V-for 循环:
<tbody>
<tr v-for="(index, costType) in treatment.costTypes | filterBy 'true' in 'financeable'" is="cost-type-table-row-finance" :cost-type="costType"></tr>
</tbody>
API函数:
getSumOfAnnualCapitalTotals (treatmentId, costToFinance, financeOption, relativeStartYear, financeDuration, principalForgivenessRate) {
let data = {
treatmentId: treatmentId,
costToFinance: costToFinance,
financeOption: financeOption,
relativeStartYear: relativeStartYear,
financeDuration: financeDuration,
principalForgivenessRate: principalForgivenessRate
}
return Vue.http.post(API_ROOT + 'sumOfAnnualCapitalTotalsForTreatment', data)
}
行动:从API拉取JSON,调度突变函数。
export const updateFinTotals = function ({ dispatch, state }, treatmentId, costToFinance, financeOption, relativeStartYear, financeDuration, principalForgivenessRate) {
api.getSumOfAnnualCapitalTotals( treatmentId, costToFinance, financeOption, relativeStartYear, financeDuration, principalForgivenessRate ).then(function (response) {
dispatch('UPDATE_ANNUALIZED', response.data)
}, function (response) {
console.log(response)
})
}
突变:用JSON更新状态。
UPDATE_ANNUALIZED (state, annualized) {
for (var i = 0; i < state.scenario.treatments.length; i++) {
for (var j = 0; j < state.scenario.treatments[i].costTypes.length; j++) {
state.scenario.treatments[i].costTypes[j]["annualized"] = annualized
}
}
}
编辑:下图
组件:http://i.imgur.com/lcS5Fgo.jpg
JSON 结构:http://i.imgur.com/AsANZOp.jpg
好吧,你的 API returns one 值(one 成本类型 一个治疗)
来自链接 API 文档的示例:
{"sumOfAnnualCapitalTotals":150374.9849625}
但您将其分配给 all 成本类型的 all 治疗,并在突变中使用 for 循环:
for (var i = 0; i < state.scenario.treatments.length; i++) {
for (var j = 0; j < state.scenario.treatments[i].costTypes.length; j++) {
state.scenario.treatments[i].costTypes[j]["annualized"] = annualized
}
}
你应该做的是将 treatmentID
和成本类型(我 sherlock-holmed,称为 costToFinance
)从动作传递到突变,然后过滤状态匹配对象,并仅更新:
UPDATE_ANNUALIZED (state, treadmentId, costToFinance, annualized) {
const treatment = state.treatments.find((t) => t.treatmentId === treatmentId)
const currCostType = treatment.costTypes.find((costType) => costType.Id === costToFinance)
currCostType.annualized = annualized
}
问题是您的 JSON 似乎没有任何用于 find
它的 costTypes 的 ID,但这需要您自己弄清楚。