KO Grid 无法保存已编辑单元格中的数据 - 使用 Plunker
KO Grid unable to save data from edited cell - with Plunker
我有一个 Asp.Net MVC 网站,我已经开始使用 knockoutjs kogrid 来显示数据网格。
对于一个特定的网格,我希望用户能够编辑电子邮件地址列。单击保存按钮后,编辑后的值应保存到数据库中。
我可以正常显示网格,并且在选择一行时,用户可以在所需的单元格中键入内容。我的问题是,我还没有弄清楚如何引用 changed 单元格值。
这是我的网格选项的定义:
var emailCellTemplate = '<div><input type=\"text\" data-bind=\"visible: $parent.selected(), value: $parent.entity[$data.field]" /><span data-bind=\"visible: !$parent.selected(), text: $parent.entity[$data.field]\"></span></div>'
this.gridOptions = {
height: 200,
afterSelectionChange: function () { return true; },
data: self.workflowRules,
enablePaging: true,
pagingOptions: self.pagingOptions,
filterOptions: self.filterOptions,
selectWithCheckboxOnly: true,
selectedItems: self.selected,
canSelectRows: true,
displaySelectionCheckbox: true,
columnDefs: [{ field: 'ReceivePortName', displayName: 'Receive Port', width: 130 },
{ field: 'MessageType', displayName: 'Message Type', width: 400 },
{ field: 'TriggerSource', displayName: 'Source', width: 150 },
{ field: 'TargetEmailAddress', displayName: 'Email', width: 180, cellTemplate: emailCellTemplate },
{ field: 'AssignedToName', displayName: 'Assigned To', width: 140 },
]
};
$parent.entity[$data.field] 非常适合选择从数据库加载但不给我编辑值的值.当我在单击 保存到数据库 按钮时运行的 js 代码上放置断点时,我确实可以在 WorkflowRules.TargetEmailAddress 中看到编辑后的值 但我还没有弄清楚如何绑定它。
我创建了一个 plunk 来帮助说明:https://plnkr.co/edit/Ibc0WZwyb4melgNDzcUo
谁能告诉我如何设置我的 emailCellTemplate?
感谢您的意见,我现在已经找到了错误的原因。
问题出在我的 javascript 控制器的 savetoDatabase 函数中。控制器确实定义了一个可观察的 this.workflowRules = ko.observableArray(vm.WorkflowRules);
但在 saveToDatabase 函数中它在调用服务器控制器 [=12= 之前转换为 JSON 时使用了服务器视图模型]
为了解决这个问题,我添加了一个额外的行来更新 vm 的 WorkflowRules 数组,在转换为 JSON 之前使用可观察对象的内容,所以我现在有
vm.WorkflowRules = this.workflowRules();
var jsSaveModel = ko.toJS(vm);
我有一个 Asp.Net MVC 网站,我已经开始使用 knockoutjs kogrid 来显示数据网格。
对于一个特定的网格,我希望用户能够编辑电子邮件地址列。单击保存按钮后,编辑后的值应保存到数据库中。
我可以正常显示网格,并且在选择一行时,用户可以在所需的单元格中键入内容。我的问题是,我还没有弄清楚如何引用 changed 单元格值。
这是我的网格选项的定义:
var emailCellTemplate = '<div><input type=\"text\" data-bind=\"visible: $parent.selected(), value: $parent.entity[$data.field]" /><span data-bind=\"visible: !$parent.selected(), text: $parent.entity[$data.field]\"></span></div>'
this.gridOptions = {
height: 200,
afterSelectionChange: function () { return true; },
data: self.workflowRules,
enablePaging: true,
pagingOptions: self.pagingOptions,
filterOptions: self.filterOptions,
selectWithCheckboxOnly: true,
selectedItems: self.selected,
canSelectRows: true,
displaySelectionCheckbox: true,
columnDefs: [{ field: 'ReceivePortName', displayName: 'Receive Port', width: 130 },
{ field: 'MessageType', displayName: 'Message Type', width: 400 },
{ field: 'TriggerSource', displayName: 'Source', width: 150 },
{ field: 'TargetEmailAddress', displayName: 'Email', width: 180, cellTemplate: emailCellTemplate },
{ field: 'AssignedToName', displayName: 'Assigned To', width: 140 },
]
};
$parent.entity[$data.field] 非常适合选择从数据库加载但不给我编辑值的值.当我在单击 保存到数据库 按钮时运行的 js 代码上放置断点时,我确实可以在 WorkflowRules.TargetEmailAddress 中看到编辑后的值 但我还没有弄清楚如何绑定它。
我创建了一个 plunk 来帮助说明:https://plnkr.co/edit/Ibc0WZwyb4melgNDzcUo
谁能告诉我如何设置我的 emailCellTemplate?
感谢您的意见,我现在已经找到了错误的原因。
问题出在我的 javascript 控制器的 savetoDatabase 函数中。控制器确实定义了一个可观察的 this.workflowRules = ko.observableArray(vm.WorkflowRules);
但在 saveToDatabase 函数中它在调用服务器控制器 [=12= 之前转换为 JSON 时使用了服务器视图模型]
为了解决这个问题,我添加了一个额外的行来更新 vm 的 WorkflowRules 数组,在转换为 JSON 之前使用可观察对象的内容,所以我现在有
vm.WorkflowRules = this.workflowRules();
var jsSaveModel = ko.toJS(vm);