我有一个表格,其包括添加operting时间的餐厅。

operation_hours(星期,OPEN_TIME,CLOSE_TIME,restaurant_id)

我使用此形式

<div class="operation_hours">
<?php echo $this->Form->dateTime('RestaurantOperationHour.open_time', false, '12', null, array('interval' => 15, 'value' => '10:00:00')); ?>
<?php echo "<label> to </label>"; ?>
<?php echo $this->Form->dateTime('RestaurantOperationHour.close_time', false, '12', null, array('separator' => ' ', 'interval' => 15, 'value' => '23:00:00')); ?>
</div>

产生

http://pastebin.com/TDDesCRn

我想添加多个的这个..柜面其余部分是这样工作的上午10点到下午3点然后下午7点到下午11点。

我将需要设置用于一个单一的一天。

这是添加此动态。

的最佳方式

我尝试了一些这样的事

// JavaScript Document
$(function () {

    // Phone Number
    var i = $('div#phoneContainer div input').size();
    $('a#addPhone').click(function () {
        $('<div><input name="data[Restaurantphone][' + i + '][number]" type="text" value="" id="Restaurantphone' + i + 'Number" /></div>').appendTo('div#phoneContainer');
        i++;
    });


    // Restaurant Timing
    var j = $('div#timeContainer div').size();
    $('a#addTime').click(function () {

        open_hours = $('div#timeContainer div select#Restauranttiming0OpenHour').html();
        open_minutes = $('div#timeContainer div select#Restauranttiming0OpenMin').html();
        open_meridian = $('div#timeContainer div select#Restauranttiming0OpenMeridian').html();
        close_hours = $('div#timeContainer div select#Restauranttiming0CloseHour').html();
        close_minutes = $('div#timeContainer div select#Restauranttiming0CloseMin').html();
        close_meridian = $('div#timeContainer div select#Restauranttiming0CloseMeridian').html();

        tag1 = '<select id="Restauranttiming';
        tag2 = '" name="data[Restauranttiming][';
        tag3 = '</select>';
        open_hours = tag1 + j +'OpenHour' + tag2 + j + '][open][hour]">' + open_hours + tag3;
        open_minutes = tag1 + j +'OpenMin' + tag2 + j + '][open][min]">' + open_minutes + tag3;
        open_meridian = tag1 + j +'OpenMeridian' + tag2 + j + '][open][meridian]">' + open_meridian + tag3;

        close_hours = tag1 + j +'CloseHour' + tag2 + j + '][close][hour]">' + close_hours + tag3;
        close_minutes = tag1 + j +'CloseMin' + tag2 + j + '][close][min]">' + close_minutes + tag3;
        close_meridian = tag1 + j +'CloseMeridian' + tag2 + j + '][close][meridian]">' + close_meridian + tag3;


        content = '<div>\n' + open_hours + ':' + open_minutes + ' ' + open_meridian + '\n-\n' +close_hours + ':' + close_minutes + ' ' + close_meridian + '\n</div>';
        $(content).appendTo('div#timeContainer');
        j++;
    });

});

我想知道的最佳方式使用CakePHP和jQuery?

要做到这一点
有帮助吗?

解决方案

另一种方法将是使用一个AJAX调用,返回表单输入您希望的控制器的方法,以及插入件在它现有的后。如果您创建与窗体的只是这部分您的意见元素,你可以重复使用该元素在你的add()edit()看法,以及对Ajax的看法。然后,你还可以使用表单助手来生成它。

<强>更新下面是它如何工作的例子。

在您的app_controller,包括RequestHandler在组件:

var $components = array('RequestHandler');

和也把这个在您的beforeFilter方法在app_controller:

if($this->RequestHandler->isAjax()){
    Configure::write('debug', 0); // forget debug messages
    $this->layout = 'ajax'; //and use ajax layout
}

您将不得不对AJAX调用一个简单的控制器的方法:

function add_time() {
    $this->render('time');
}

time.ctp也可以是非常简单的,并且只是指元件:

echo $this->element('time_form');

在元件称为具有所需的形式(例如从问题的第一码块)的只是部分“time_form.ctp”(在本例中)。然后,在餐厅控制器的add()edit()意见,调用相同的元素(实际上你需要通过哪些值已经被保存在edit()鉴于告诉它的数据):

<fieldset>
<legend>Times</legend>
    <div id="times">
        <?php echo $this->element('time_form'); ?>
    </div>
</fieldset>

然后包括将调用add_time()方法和放置导致#times请求链路。您可以使用JsHelper此:

http://book.cakephp.org/view/1593/Methods

检查request()link()方法。这只是它是如何工作的一个大致轮廓。你需要弄清楚在通过该值来确定你的表单元素键等。

希望这有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top