Select 相互依赖且在敲除中预选值
Select with Dependency On Each Other and values preselected in knockout
我有一个页面有第一个请求,我在其中恢复我的页面的所有必要数据。
这个信息是这样的:
"A1": 8,
"A2": 61,
"A3": 585,
"A4": 空.........等等
其中每个值都是特定 select 的 ID,其中一个在淘汰赛中加载:
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A1">A1</label>
<select class="form-control" data-bind="options: $root.A1List, optionsText: 'A1name' , optionsValue: 'idA1', value: $data.A1, optionsCaption: '---------------'"></select>
</div>
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A2">A2</label>
<select class="form-control" data-bind="options: $root.A2List, optionsText: 'A2name' , optionsValue: 'idA2', value: $data.A2, optionsCaption: '---------------'"></select>
</div>
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A3">A3</label>
<select class="form-control" data-bind="options: $root.A3List, optionsText: 'A1name' , optionsValue: 'idA3', value: $data.A3, optionsCaption: '---------------'"></select>
</div>
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A4">A4</label>
<select class="form-control" data-bind="options: $root.A4List, optionsText: 'A4name' , optionsValue: 'idA4', value: $data.A4, optionsCaption: '---------------'"></select>
</div>
这些 select 在您选择的函数中相互依赖:
root.A2List = ko.observableArray([]);
root.A2ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A2/",
dataType: 'json',
async: true,
type:'GET',
data: {
A1: root.Data().A1()
},
success: function(data) {
root.A2List(ko.mapping.fromJS(data)());
}
});
}, root);
root.A3List = ko.observableArray([]);
root.A3ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A3/",
dataType: 'json',
async: true,
type:'GET',
data: {
A1: root.Data().A1()
A2: root.Data().A2()
},
success: function(data) {
root.A3List(ko.mapping.fromJS(data)());
}
});
}, root);
root.A4List = ko.observableArray([]);
root.A4ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A4/",
dataType: 'json',
async: true,
type:'GET',
data: {
A1: root.Data().A1()
A2: root.Data().A2()
A3: root.Data().A3()
},
success: function(data) {
root.A4List(ko.mapping.fromJS(data)());
}
});
}, root);
我正确地得到了每个 select 的所有值,但是我丢失了正确的值或 id 用户第一次发出请求时应该 selected 哪个。我理解由于我的 select 的计算列表,我想要的功能,但我第一次需要当第一次加载页面时每个 select 中的预 selected 值。
有什么想法吗?
感谢 Artem 提供的线索:
root.A3ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A3/",
dataType: 'json',
***async: false,***
type:'GET',
data: {
A1: root.Data().A1()
A2: root.Data().A2()
},
success: function(data) {
root.A3List(ko.mapping.fromJS(data)());
}
});
将 ajax 请求更改为 async false 问题已解决。
我有一个页面有第一个请求,我在其中恢复我的页面的所有必要数据。
这个信息是这样的:
"A1": 8, "A2": 61, "A3": 585, "A4": 空.........等等
其中每个值都是特定 select 的 ID,其中一个在淘汰赛中加载:
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A1">A1</label>
<select class="form-control" data-bind="options: $root.A1List, optionsText: 'A1name' , optionsValue: 'idA1', value: $data.A1, optionsCaption: '---------------'"></select>
</div>
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A2">A2</label>
<select class="form-control" data-bind="options: $root.A2List, optionsText: 'A2name' , optionsValue: 'idA2', value: $data.A2, optionsCaption: '---------------'"></select>
</div>
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A3">A3</label>
<select class="form-control" data-bind="options: $root.A3List, optionsText: 'A1name' , optionsValue: 'idA3', value: $data.A3, optionsCaption: '---------------'"></select>
</div>
<div class="col-lg-3 col-md-3">
<label class="obligatory">*</label>
<label for="id_A4">A4</label>
<select class="form-control" data-bind="options: $root.A4List, optionsText: 'A4name' , optionsValue: 'idA4', value: $data.A4, optionsCaption: '---------------'"></select>
</div>
这些 select 在您选择的函数中相互依赖:
root.A2List = ko.observableArray([]);
root.A2ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A2/",
dataType: 'json',
async: true,
type:'GET',
data: {
A1: root.Data().A1()
},
success: function(data) {
root.A2List(ko.mapping.fromJS(data)());
}
});
}, root);
root.A3List = ko.observableArray([]);
root.A3ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A3/",
dataType: 'json',
async: true,
type:'GET',
data: {
A1: root.Data().A1()
A2: root.Data().A2()
},
success: function(data) {
root.A3List(ko.mapping.fromJS(data)());
}
});
}, root);
root.A4List = ko.observableArray([]);
root.A4ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A4/",
dataType: 'json',
async: true,
type:'GET',
data: {
A1: root.Data().A1()
A2: root.Data().A2()
A3: root.Data().A3()
},
success: function(data) {
root.A4List(ko.mapping.fromJS(data)());
}
});
}, root);
我正确地得到了每个 select 的所有值,但是我丢失了正确的值或 id 用户第一次发出请求时应该 selected 哪个。我理解由于我的 select 的计算列表,我想要的功能,但我第一次需要当第一次加载页面时每个 select 中的预 selected 值。
有什么想法吗?
感谢 Artem 提供的线索:
root.A3ListFuncion = ko.computed(function(){
$.ajax({
url: RUTA_GLOBAL + "/api/A3/",
dataType: 'json',
***async: false,***
type:'GET',
data: {
A1: root.Data().A1()
A2: root.Data().A2()
},
success: function(data) {
root.A3List(ko.mapping.fromJS(data)());
}
});
将 ajax 请求更改为 async false 问题已解决。