javascript - 在 sap.m.table 中添加和编辑项目
问题描述
我有个问题。我将 oData 服务绑定到此表,它具有功能(添加、编辑、保存和取消)。
因此,我可以通过单击 + 按钮添加新行,这将触发 onAddViewTaskItem()
(下面提供的代码)。
所以我为新项目输入了新的描述和子描述。但是,如果我编辑任何当前项目(不是新创建的项目),它将updateItems()
在ListBase
调用updateAggregation
.
在我调试时,它会使用当前的绑定上下文进行更新(我看到上下文中只有 3 个项目而不是 4 个)。似乎当我addItem
到表时,它不会将新创建的上下文添加到表的绑定上下文中。
无论如何要更新绑定上下文?
onAddViewTaskItem: function(oEvent) {
this.getModel("viewSettings").setProperty("/visible", true);
this.getModel("viewSettings").setProperty("/editable", true);
this._createAddRow();
},
_createAddRow: function() {
var _oContext = this._createTaskItemContext();
this._addTableRow(_oContext);
},
_createTaskItemContext: function(oEvent) {
return this.getModel("xsodata").createEntry("/TaskItems", {
properties: {
"TaskItemID": this._generateGuid(),
"YearID": this._oScheduleDetailDialog.getBindingContext("xsodata").getObject().YearID,
"TaskDescription": "",
"TaskSubDescription": "",
"DeleteFlag": ""
},
success: function(oEvent) {}.bind(this),
error: function(oEvent) {}.bind(this)
});
},
_addTableRow: function(oContext) {
var oScheduleTaskItem = this._createRowControls();
this.getView().addDependent(oScheduleTaskItem);
oScheduleTaskItem.setBindingContext(oContext, "xsodata");
this.byId("tblScheduleItems").addItem(oScheduleTaskItem);
},
_createRowControls: function(oComboBoxControl) {
return new ColumnListItem({
cells: [
this._createInputControl("viewSettings>/editable", "i18n>description", "xsodata>TaskDescription"),
this._createInputControl("viewSettings>/editable", "i18n>subDescription", "xsodata>TaskSubDescription"),
this._createCheckboxControl("viewSettings>/editable", "xsodata>DeleteFlag")
]
});
},
_createInputControl: function(sEditable, sPlaceholder, sBindingProperty) {
var _oInputControl = new Input({
maxLength: 255,
editable: "{" + sEditable + "}",
placeholder: "{" + sPlaceholder + "}",
value: "{" + sBindingProperty + "}"
});
return _oInputControl;
},
_createCheckboxControl: function(sEditable, sBindingProperty) {
var _oCheckBoxControl = new CheckBox({
editable: "{" + sEditable + "}",
selected: "{= ${" + sBindingProperty + "} === 'X' ? true : false}",
select: this.handleDeleteFlagSelect
});
return _oCheckBoxControl;
},
handleDeleteFlagSelect: function(oEvent) {
var bSelected = oEvent.getParameter("selected");
var sPath = oEvent.getSource().getBindingContext("xsodata").getPath();
this.getModel("xsodata").setProperty(sPath + "/DeleteFlag", bSelected ? "X" : "");
},
解决方案
推荐阅读
- macos - 在 macOS 中无法启动 Leap Motion Home 应用程序
- zsh - 检查是否设置了“以x的值命名的参数”
- javascript - 如何在js中正确使用closest()
- c++ - GLFW:glfwSetGammaRamp 函数不起作用
- python - 将元素标签添加到现有的 html
- swiftui - SwiftUI 两行导航栏
- javascript - 减少不保存在变量值中
- html - 如何使 svg 矢量图标内联 css?
- jquery - 在 jquery 数据表组件中使用 Ajax 发布 ViewModel 的问题
- flutter - Flutter StreamBuilder 复杂的小部件冻结屏幕