我想建立一個表單,我選擇多個人的任務,我需要能夠稍後更新任務。因此,我試圖按照在MaterializeCSS文檔中建議的方式重新初始化選擇框之前,將先前選定的受讓人推入observableArray。但是,這些選項在選擇框中未顯示爲選中狀態。Knockout.js + MaterialiseCSS推送選定的值多選擇不工作
首先,我爲我的受讓人使用Prototype。
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和其他。員工和受讓人都可觀察陣列是受讓人陣列。
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()'也是'id'數組嗎? – user3297291
他們都是受讓人的陣列。 – Youmy001
此數據綁定選項'optionsValue:'id''告訴淘汰賽將所選項目的屬性'[「id」]'存儲在'assignees'中。如果您刪除此選項,則存儲實際參考。 – user3297291