亲爱的EXT爱好者,
我正在做一个项目,我需要一个管理面板来编辑工作职能。网格正在使用 Ext.Direct 与 MySQL 数据库通信。它可以很好地加载数据。网格显示 id 和函数名称
我在网格中添加了一个 RowEditing 插件,用于编辑功能设置。问题是,当我尝试提交更改时,我在网格的左上角看到一个小的红色三角形,控制台中没有任何错误代码。更改不会提交到 MySQL 数据库。
我的程序工作和加载数据的方式:
这是我的功能商店:
Ext.direct.Manager.addProvider(Ext.app.REMOTING_API); Ext.define("MCS.store.FunctionStore", { extend: "Ext.data.Store", requires: "MCS.model.Functions", model: "MCS.model.Functions", id: "FunctionStore", proxy: { type: "direct", api: { read: QueryDatabase.getFunctions, create: QueryDatabase.createFunction, update: QueryDatabase.updateFunction, destroy: QueryDatabase.removeFunction, } }, });
在控制器中:渲染管理面板时,商店会加载以下函数:
loadStore: function() { functionStore.load(); }
这是显示函数的网格:
var rowEditingFunctions = Ext.create("Ext.grid.plugin.RowEditing", { clicksToMoveEditor: 1, autoCancel: false, listeners: { edit: function(editor,e,opt) { var grid = e.grid; var record = e.record; console.log(record.data.functionName); var editedrecords = grid.getStore().getUpdatedRecords(); console.log(editedrecords); } } }); var functionGrid = Ext.create("Ext.grid.Panel", { height: 500, width: 800, store: functionStore, title:"List of Job Functions - double click to edit", columns: [ { dataIndex: "id", width: 50, text: "ID" },{ dataIndex: "functionName", flex: 1, text: "Function", field: { type: "textfield", allowBlank: false } }], plugins: [ rowEditingFunctions ], dockedItems: [ { xtype: "toolbar", store: functionStore, dock: "bottom", items: [ { iconCls: "add", text: "Add", handler: function() { rowEditingFunctions.cancelEdit(); var newRecord = Ext.create("App.model.Functions"); functionStore.insert(0, newRecord); rowEditingFunctions.startEdit(0, 0); var sm = functionGrid.getSelectionModel(); functionGrid.on("edit", function() { var record = sm.getSelection() functionStore.sync(); functionStore.remove(record); functionStore.load(); }); } }, { iconCls: "delete", text: "Delete", handler: function() { rowEditingFunctions.cancelEdit(); var sm = functionGrid.getSelectionModel(); Ext.Msg.show( { title:"Delete Record?", msg: "You are deleting a function permanently, this cannot be undone. Proceed?", buttons: Ext.Msg.YESNO, icon: Ext.Msg.QUESTION, fn: function(btn) { if(btn === "yes") { functionStore.remove(sm.getSelection()); functionStore.sync(); } } }); } }] }] });
如您所见,我在 RowEditing 插件的编辑事件中添加了一个侦听器,这将在控制台中显示已编辑记录的数组,就像它应该的那样。
4. 最后,这是更新数据库的 PHP 代码:
public function updateFunction(stdClass $params)
{
$db = $this->__construct();
if ($stmt = $db->prepare("UPDATE functions SET functionName=? WHERE id=?"))
{
$stmt->bind_param('si', $functionName, $id);
$functionName = $params->functionName;
$id = (int) $params->id;
$stmt->execute();
$stmt->close();
}
return $this;
}
5. 奇怪的部分:一旦我添加了一个工作功能,我可以编辑所有其他功能,这些更改将提交到数据库......
作为旁注:我只是EXT的初学者,试图自学,但过去几天我一直在这个问题上打破头脑,所以我决定问你们。
提前感谢您的回答!