我正在使用 vue-bootstrap 处理一个页面,该页面在每一行中嵌入了一个 b-form-checkbox-group。这些看起来很好。当我尝试将值分配给选中的道具时,问题就来了。当我分配一个静态编号时,这些框将像页面加载时一样被选中,但是当我尝试将其设置为接收来自 jquery get 调用的响应时,据我所知,这些框有时只填充没有模式。
<nit-card :title="host">
<b-table
:items="interfaceNames"
:fields="switch_interface_config_col_names">
<template slot="tagged" slot-scope="row">
<b-form-checkbox-group :options="vlans"
:checked="interfaceNames[row.index].taggedVlans"
stacked>
</b-form-checkbox-group>
</template>
<template slot="untagged" slot-scope="row">
<b-form-radio-group :options="vlans"
:checked="interfaceNames[row.index].untaggedVlans"
stacked>
</b-form-radio-group>
</template>
</b-table>
</nit-card>
以上是表格的html。nit-card 是一个看起来像这样的 vue.component。
Vue.component('nit-card', {
props: ['title'],
template: `
<div class="card">
<div class="card-header">
<h2 class="card-title">{{ title }}</h2>
</div>
<div class="card-body">
<slot></slot>
</div>
</div>
`
})
以及一些 js 代码,其中包含为获取已检查道具的数据而调用的方法的示例。
let generic_name = new Vue({
el: '#generic_name',
data: function(){
return{
interfaceNames: [],
vlans: [],
switch_interface_config_col_names: [
{key: "interfaceName", sortable: true},
{key: "description", sortable: false},
{key: "tagged", sortable: false},
{key: "untagged", sortable: false},
],
submit_params: [
["Switch", "text", "Hostname or IP", true],
["Interface", "text", "Interface Name", true],
],
host: "",
}
},
methods: {
getTagged: function(){
let that = this
for(let i = 0; i < that.interfaceNames.length; i++){
let url_encoding_re = /\//g;
let interfaceName = that.interfaceNames[i].interfaceName.replace(url_encoding_re, '%5c')
$.get(api_url + "/switches/" + that.host + "/interfaces/" + interfaceName + "/vlans/tagged", function(response) {
console.log(response)
that.interfaceNames[i].taggedVlans = response.vlans
})
}
},
}
我想象它流动的方式是 interfaceNames 数组存储数据,然后 html 使用 row.index 值访问它。实际发生的情况是,即使当我查看根 vue 时,这些值存在于 interfaceNames[x].taggedVlans 中,但可能有一半的复选框表单在其选中的属性中具有选中的值。
我需要做什么才能为这些复选框组一致地填充选中的道具?
编辑:通过手动使用 v-if 切换表格(例如表格呈现后的按钮),所有复选框都将正确显示。一旦我有一种可靠的方式来自动切换表格,我就会把它贴在这里。