【发布时间】:2017-03-15 14:32:06
【问题描述】:
我正在尝试构建一个表单,我可以在其中选择多个人来执行一项任务,并且我需要稍后能够更新任务。因此,在按照 MaterializeCSS 文档中的建议重新初始化选择框之前,我试图将先前选择的受让人推送到 observableArray 中。但是,选择框中的选项未显示为选中状态。
首先,我为我的受让人使用原型。
function Assignee (data) {
var self = this;
self.id = ko.observable(data.id);
self.name = ko.observable(data.name);
}
任务也是如此。
function Task (data) {
var self = this;
self.id = ko.observable(data.id);
self.title = ko.observable(data.name);
self.description = ko.observable(data.description);
self.startDate = ko.observable(data.start);
self.endDate = ko.observable(data.end);
self.assignees = ko.observableArray($.map(data.assignees, function (item) {return new Assignee(item)}));
}
在我的视图模型中,我有一个 observableArray 用于所有可选项目,另一个用于选定项目。 employees 和 assignees observableArray 都是 Assignee 的数组。
function TaskViewModel (task) {
var self = this;
self.id = ko.observable(null);
self.title = ko.observable(null);
self.description = ko.observable(null);
self.task = ko.observable(task);
self.employees = ko.observableArray([]);
self.assignees = ko.observableArray([]);
Request(
'/users/select/assignees',
'GET',
{},
function (data) {
self.employees($.map(data, function (item) {return new Assignee(item)}));
if (task != undefined) {
task.assignees().forEach(function(item, index, array) {
self.assignees().push(item);
});
$('select#task_edit_assignees').material_select();
}
});
};
然后我的 HTML 是这样的:
<div class="input-field col s12">
<select id="task_edit_assignees" data-bind="options: employees, selectedOptions: assignees, optionsText: 'name', optionsCaption: 'Choisissez un ou plusieurs employés'" multiple></select>
<label for="task_edit_assignees">Assigner à</label>
</div>
【问题讨论】:
-
您的
assignees是id值的数组(对吗?)。task.assignees()也是ids 的数组吗? -
它们都是Assignee的数组。
-
此数据绑定选项
optionsValue: 'id'告诉敲除将所选项目的属性["id"]存储在assignees中。如果您删除此选项,您将存储一个实际参考。 -
我删除了它,但它不再起作用了。我编辑了问题以反映以删除它。
标签: javascript jquery knockout.js materialize