我想开发蛋糕php与extjs 3.2通过可编辑的网格。
可以进行插入、更新和删除操作。
当我们从"movie"模型文件中获取数据并在view/movie/json中创建一个json文件时
在json文件中我有数据但是
如果我想在网格中显示数据,那么这个json文件数据我如何在网格中存储。
谢谢。
在工作中,我们使用CakePHP和ExtJS进行大量的工作。
我们单独使用ExtJS的视图只需要调用包含该视图的特定javascript文件,以及一个div来呈现ExtJS模块。
如果你在你的布局的头部使用<?php echo $scripts_for_layout ?>
,你可以很容易地从你的视图内添加单个javascript文件使用
<?php echo $this->Html->script('relative/path/from/js/folder.js', array('inline' => false)) ?>
在Ext中,您将需要设置您的网格使用Ext.data.Store
的实例,通过存储和它的依赖关系(您还需要代理,阅读器和写入器),您可以将数据来回发送到您的CakePHP控制器。
我们更喜欢使用JSON作为我们的数据,因为它很容易操作和保存在我们需要的地方。
我们的基本设置通常是这样的。
在ExtJSvar proxy = new Ext.data.HttpProxy({
api: {
// these will map to cakephp controller actions
create: { url: '/cake_controller/create', method: 'POST' },
read: { url: '/cake_controller/read', method: 'GET' },
update: { url: '/cake_controller/update', method: 'POST' },
destroy: { url: '/cake_controller/destroy', method: 'POST' }
}
});
var fields = Ext.data.Record.create([
// this will map to your database fields (or at least the ones your
// returning from cakephp to put in your grid
{ name: 'id', type: 'int' },
{ name: 'another_model_field' },
{ name: 'created', type: 'date', dateFormat: 'Y-m-d H:i:s' },
{ name: 'modified', type: 'date', dateFormat: 'Y-m-d H:i:s' },
]);
var reader = Ext.data.JsonReader({
root: 'controllerName' // this is the root node of the json cakephp is replying with
}, fields);
var writer = Ext.data.JsonWriter({
encoded: true,
writeAllFields: true
});
var store = Ext.data.Store({
storeId: 'myStore',
proxy: proxy,
reader: reader,
writer: writer,
autoSave: true,
autoLoad: true
});
然后在你的网格中,将你的存储设置为你刚刚创建的那个
var grid = Ext.grid.GridPanel({
store: store,
...
...
...
});
任何时候存储被改变,它将调用相关的api方法(create, read, update, destroy),这些方法被映射到你的CakePHP控制器动作。在你的行动中,你可以通过$this->params['form']
访问数据。如果你像我们一样使用Json,你可以使用json_decode($this->params['form'], true)
将其解码成一个关联数组,以便在CakePHP方面易于操作/持久化。
你可以从你的CakePHP动作中返回某些东西,这样ExtJS就知道保存/更新/等是否成功。我们通常只返回Json编码的array('success' => true)
。
我希望这能帮助你开始,它有很多要吸收,但它不是大量的工作,只是大量的打字。做过几次就很容易记住了。
当你使用ExtJS时,记住文档是你的朋友!