我有一个显示成员列表的网格。网格有一个名为Edit with action icon的动作列。如果用户单击“编辑”图标,则该窗口将重定向到包含“编辑用户”表单的另一个页面。
现在我的商店和网格的代码如下:
var userstore = Ext.create('Ext.data.Store', {
storeId: 'viewUsersStore',
model: 'Configs',
autoLoad: true,
proxy: {
type: 'ajax',
url: '/user/getuserviewdata.castle',
reader: { type: 'json', root: 'users' },
listeners: {
exception: function (proxy, response, operation, eOpts) {
Ext.MessageBox.alert("Error", "Session has timed-out. Please re-login and
try again.");
}
}
}
});
var grid = Ext.create('Ext.grid.Panel', {
id: 'viewUsersGrid',
title: 'List of all users',
store: Ext.data.StoreManager.lookup('viewUsersStore'),
columns: [
//{header: 'ID', dataIndex: 'id', hidden: true},
{header: 'Username', dataIndex: 'username'},
{header: 'Full Name', dataIndex: 'fullName'},
{header: 'Company', dataIndex: 'companyName'},
{header: 'Latest Time Login', dataIndex: 'lastLogin'},
{header: 'Current Status', dataIndex: 'status'},
{header: 'Edit',
menuDisabled: true,
sortable: false,
xtype: 'actioncolumn',
width: 50,
items: [{
icon: '../../../Content/ext/img/icons/fam/user_edit.png',
handler: function (grid, rowIndex, colIndex){
var rec = userstore.getAt(rowIndex);
alert("Edit " + rec.get('username')+ "?");
EditUser(rec.get('id'));
}
}]
}
]
});
function EditUser(id) {
window.location = "/user/index.castle";
}
当用户单击“编辑”图标时,将调用函数EditUser(id)。在该函数中,window.location将用户重定向到Edit User表单(这就是url所代表的内容)。
现在我的问题是:如何将数据库中的成员数据加载到“编辑用户”表单中?
换句话说,如果用户点击“编辑”图标,他/她应该被重定向到“编辑用户”表单/窗口,然后应该(自动)加载成员数据(即用户名,全名等)。数据库(每个成员都有一个唯一的id)。
我没有使用php,而是使用Ext JS和Castle Monorail(MVC)。我尝试使用loadRecord(rec),但是问题是网格记录不包含编辑用户表单中出现的所有数据字段,因此需要从数据库而不是记录加载数据。
例如,“编辑用户”表单有一个名为“权限”的复选框组,该组在网格中省略。
此外,需要将编辑过的成员数据保存回数据库。
任何人都有关于如何解决这个问题的任何提示?
答案 0 :(得分:1)
你为什么要用extjs创建一个多页应用程序?而不是单页应用程序?有什么好处?
您需要用户的ID。这是从网格传递的。然后使用Model.load()将该用户从数据库加载到模型中。您可以使用form.loadRecord()将模型加载到表单中,它将根据表单字段的名称自动填充。
要加载模型,并将其加载到表单中,您可以执行以下操作:
Model.load(1, {
callback: function(record){
form.loadRecord(record); //any matching form names will get loaded into form
}
});
三。你应该使用你名字很奇怪的“配置”模型。您应该将代理从商店移动到模型。商店将继承其模型代理。
要将代理从商店移动到模型,只需在代码中将其删除,然后将“proxy”属性添加到模型中。无论是在商店还是模特,它们都是一样的。