如何通过模态表单创建相关的表记录?

时间:2014-04-07 15:00:48

标签: javascript cakephp modal-dialog

我已经被困在这里大约四天了,并尝试了许多其他线程中的许多例子,但它们都不适合我或适应我的情况。

数据库表:

tallyin

id | date | field1 | field2 | field3 | ...other fields

tallyinitems

id | tallyin_id (fk) | name | make | model | description | ...other fields

我有一个目前正常工作的表单,它在表tallyin中创建记录。问题是我需要允许用户在保存tallyinitems记录的同时在tallyin表中创建许多项目。我需要用户能够单击ADD按钮或链接,该按钮或链接将打开一个模式表单,其中包含将创建tallyinitem记录的表单。保存项目并关闭模态表单后,主表单应自动更新所有正在添加的项目的内容。

我尝试使用一堆独立的方法,但到目前为止还没有一个正常。

我正在使用jQueryJQuery UI,我添加了PrototypeScriptaculous来尝试模态形式,并且只完成了部分结果。

如果有人知道更好/更简单的方法来完成这项工作,我愿意改变原型或脚本。

我无法理解为什么没有更多与此相关的示例,因为我认为这是任何数据库的常见情况。

任何帮助都将不胜感激。

1 个答案:

答案 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我没有测试上面的代码,肯定有很多错字,请检查两次。