我已经被困在这里大约四天了,并尝试了许多其他线程中的许多例子,但它们都不适合我或适应我的情况。
数据库表:
tallyin
id | date | field1 | field2 | field3 | ...other fields
tallyinitems
id | tallyin_id (fk) | name | make | model | description | ...other fields
我有一个目前正常工作的表单,它在表tallyin
中创建记录。问题是我需要允许用户在保存tallyinitems
记录的同时在tallyin
表中创建许多项目。我需要用户能够单击ADD按钮或链接,该按钮或链接将打开一个模式表单,其中包含将创建tallyinitem
记录的表单。保存项目并关闭模态表单后,主表单应自动更新所有正在添加的项目的内容。
我尝试使用一堆独立的方法,但到目前为止还没有一个正常。
我正在使用jQuery
,JQuery UI
,我添加了Prototype
和Scriptaculous
来尝试模态形式,并且只完成了部分结果。
如果有人知道更好/更简单的方法来完成这项工作,我愿意改变原型或脚本。
我无法理解为什么没有更多与此相关的示例,因为我认为这是任何数据库的常见情况。
任何帮助都将不胜感激。
答案 0 :(得分:0)
我希望我明白你想要获得的东西
无论如何,我将执行以下操作(使用jquery UI)
第1步:在您的视图中创建隐藏表单(请参阅此example)
<div id="dialog-form" title="Add an Item">
<?php
$echo $this->Form->create('TallyinItem')
$echo $this->Form->input( ... ) //other inputs you need for your form
echo $this->Js->submit(
'Save',
array(
'complete' => "
$('#dialog-form').dialog('close');
",
'url' => array(
'controller' => 'tallyin_items',
'action' => 'addToTallyin',
$tallyin_id // put here the id
// of the tallyin you are
// adding an item to
)
)
);
echo $this->Form->end();
?>
</div>
第2步:添加javascript以启用对话框
$this->Js->buffer('
$( "#dialog-form" ).dialog({
autoOpen: false,
height: 300,
width: 350,
modal: true
});');
步骤3:在视图中的某个位置创建一个按钮,打开对话框并在其上粘贴js事件
<button id="add-item">Add an item</button>
<?php
$this->Js->buffer('
$( "#add-item" )
.button()
.click(function() {
$( "#dialog-form" ).dialog( "open" );
});
');
?>
第4步:在TallyinItemsController
public function addToTallyin($tallyin_id)
{
\\save your data
}
您可以执行其他操作(验证您的数据,检查数据是否已保存等等),但这应该只是为了开始。
PS我没有测试上面的代码,肯定有很多错字,请检查两次。