【发布时间】:2016-11-18 18:13:41
【问题描述】:
我的函数应该使用自身的参数将 JSON 迭代地插入到特定级别的嵌套 JSON 的每个元素中,它复制了返回的第一个对象并将其插入到每个嵌套参数中。请参阅下面的屏幕截图和代码,了解我在做什么。
基本上我在状态中有一个嵌套的 JSON 对象,并且需要使用从 API 返回 JSON 的操作,然后是更新状态的突变,迭代地附加到现有对象的每个“行”的嵌套属性。
问题在于我认为的突变。我推断我的函数是复制从 API 返回的第一个 JSON 对象。请参阅下面的 Action 和 Mutation 函数,以及 JSON 的 API 函数和结构。
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)
}
Action:从 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
【问题讨论】:
-
根据您提供的内容,很难推断出代码中的问题所在。您能否创建一个简单的示例,以便我们自己进行测试?此外,我仍然不完全清楚什么是不工作以及它应该如何工作。您能否更详细地解释一下问题本身?
-
嘿@nils,感谢您的回复。检查我在代码下方添加的屏幕截图。您将放大 JSON 图像,因为它是一个巨大的对象。我有一个返回 { sumOfAnnualCapitalTotals: #### } 的函数,其中 #### 是基于每个处理 [i].costTypes[j] 的 costType 参数的总和,我将返回的对象粘贴在每个处理中Treatment[i].costTypes[j].annualized,但它只是在所有 [i] 和 [j] 上复制第一次迭代
标签: vue.js vue-resource vue-router vue-component vuex