在设置选定的选项然后更新该字段时,我很难填充选定的多选字段。
在我的应用程序中,我使用淘汰表.js将observables / observableArrays绑定到我的字段,并且在所选字段中,选项是对象列表。根据此字段中选择的选项,我想用先前选择的对象填充一个单独的下拉菜单。
在没有任何预先选择的选项的情况下,一切正常,但是当我使用JavaScript填充选择的选项敲除observableArray并调用选择的更新命令时,选择的字段仍为空,但单独的下拉列表已成功更新
HTML:
<label>User(s):</label>
<select class="chosen form-control" multiple data-bind="options: userOptions, selectedOptions: selectedUsers,
optionsText: function (user){ return user.name}"></select>
<label>Primary User:</label>
<select class="form-control" data-bind="options: selectedUsers, optionsText: 'name', value: primaryUser></select>
删除变量:
vs.userOptions: ko.observableArray([]);
vs.selectedUsers: ko.observableArray([]);
vs.primaryUser: ko.observable();
userOptions / selectedUsers对象:
{
id: -1,
email: "",
name: ""
}
JavaScript:
vs.selectedUsers.removeAll();
$.ajax({
url: url,
type: "GET",
success: function (data) {
for (var i = 0; i < data.length; i++) {
var object = {
id: data[i].id,
email: data[i].email,
name: data[i].name
};
vs.selectedUsers.push(object);
if (data[i].primaryUser) {
vs.primaryUser(object);
}
}
$(".chosen").trigger("chosen:updated");
},
error: function (xhr, status, error) {
//Handle error...
}
});
**注意:来自Ajax GET调用的数据返回一个包含pkey,id,电子邮件,名称和primaryUser的对象数组,其中primaryUser是一个布尔值,用于标识它们是否为选择的primaryUser。
答案 0 :(得分:0)
更新:回到问题所在,找到了有效的修复程序。我不得不调整ajax成功函数中的代码:
vs.selectedUsers.removeAll();
$.ajax({
url: url,
type: "GET",
success: function (data) {
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < vs.userOptions().length; j++) {
if (vs.userOptions()[j].id === data[i].id) {
vs.selectedUsers.push(vs.userOptions()[j]);
if (data[i].primaryUser) {
vs.primaryUser(vs.userOptions()[j]);
}
break;
}
}
}
$(".chosen").trigger("chosen:updated");
},
error: function (xhr, status, error) {
//Handle error...
}
});