【发布时间】:2017-05-31 17:57:28
【问题描述】:
我有两个<select> 菜单和一个文本框。 When an option in the first menu is selected, it should update the value in the textbox and it should also set the selected option in the 2nd select menu.
文本框正确更新。
但是,第二个选择菜单没有更新。
第一个菜单中的ParentID 值应用于指定第二个菜单的TaskID 值。 ParentID 值是对同一表中 TaskID 的 FK 引用。
例如,在下面,如果在第一个菜单中选择了 "ManualItems",那么 "Positions" 应该成为在第二个菜单中选择的值。
var viewModel = function(data) {
var self = this;
// variables
self.currentTask = ko.observable();
self.selectedParentTask = ko.observable();
self.taskDescription = ko.observable("");
self.tasks = ko.observableArray([
{TaskID: 1, TaskName: "ManualItems", TaskDescription: "Manual Rec", ParentID: 4, ParentName: "Positions"},
{TaskID: 2, TaskName: "Trades", TaskDescription: "Trades Data", ParentID: null, ParentName: null},
{TaskID: 3, TaskName: "File-In", TaskDescription: "File Detail", ParentID: 2, ParentName: "Trades"},
{TaskID: 4, TaskName: "Positions", TaskDescription: "Positions Overview", ParentID: null, ParentName: null}
]);
self.parentTasks = ko.observableArray([
{TaskID: 1, TaskName: "ManualItems", TaskDescription: "Manual Rec", ParentID: 4, ParentName: "Positions"},
{TaskID: 2, TaskName: "Trades", TaskDescription: "Trades Data", ParentID: null, ParentName: null},
{TaskID: 3, TaskName: "File-In", TaskDescription: "File Detail", ParentID: 2, ParentName: "Trades"},
{TaskID: 4, TaskName: "Positions", TaskDescription: "Positions Overview", ParentID: null, ParentName: null}
]);
/*
self.currentTask.subscribe(function(newValue){
self.selectedParentTask(newValue);
});
*/
self.EditTask = function () {
// populate all fields with selected task
self.taskDescription(self.currentTask().TaskDescription);
self.selectedParentTask(self.currentTask()); // set parent task to the ParentID value of currentTask
};
};
ko.applyBindings(new viewModel());
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div class="form-group">
<label for="taskName">Edit Existing Task</label>
<select class="form-control" id="taskNameSelect" data-bind="
options: tasks,
optionsText: 'TaskName',
value: currentTask,
event: {change: $root.EditTask},
optionsCaption: 'Select Task...'
"></select>
</div>
<div class="form-group">
<label for="taskParent">Select Parent Task</label>
<select class="form-control" id="taskParent" data-bind="
options: parentTasks,
optionsText: 'TaskName',
value: selectedParentTask,
optionsCaption: 'Select Parent Task...'
"></select>
</div>
<div class="form-group">
<label for="taskDescription">Task Description</label>
<textarea class="form-control" id="taskDescription" rows="3" placeholder="Enter Task Description" data-bind="value: taskDescription"></textarea>
</div>
这也是JSFiddle 中的代码。
【问题讨论】:
标签: javascript html knockout.js