Js->链接附加数据而不是更新

时间:2014-05-28 09:21:37

标签: jquery cakephp

我使用CakePHP版本2.4.7

我像这样使用Js助手

$this->Js->link('+ Add file', array('action' => 'add_file'), array('update' => '#files'))

问题是我想将#files内容附加到返回的数据而不是替换。

如果有任何解决方法,请告诉我。

2 个答案:

答案 0 :(得分:0)

它适用于cake2.2.9。 代码:

echo $this->Form->button('+ Add file', array('id'=>'add_file','type'=>'button','class'=>'buttonStyle'));
$callback_code = 'var c_html = $("#click_update").html();$("#content_update").append(c_html);';
$request_code = $this->Js->request(
    array('action' => 'a', 'param'),
    array('async' => false, 'update' => '#click_update','complete' =>$callback_code)
);
$this->Js->get('#add_file')->event('click',$request_code);

----------
希望对你有用!

答案 1 :(得分:0)

我在这里找到了一个解决方案:http://cakephp.1045679.n5.nabble.com/Js-Jquery-Helper-Append-Instead-of-Update-td3325344.html

基本上你需要对JqueryEngineHelper.php(对于CakePHP 2.x)请求函数做一个小改动:

public function request($url, $options = array()) {
        $url = html_entity_decode($this->url($url), ENT_COMPAT, Configure::read('App.encoding'));
        $options = $this->_mapOptions('request', $options);
        if (isset($options['data']) && is_array($options['data'])) {
            $options['data'] = $this->_toQuerystring($options['data']);
        }
        $options['url'] = $url;
        if (isset($options['update'])) {
            $wrapCallbacks = isset($options['wrapCallbacks']) ? $options['wrapCallbacks'] : true;
            $success = '';
            if (isset($options['success']) && !empty($options['success'])) {
                $success .= $options['success'];
            }

/ *添加以下if块,添加“position”选项,如果未设置,则将其设置为默认值“html”* /

            if(!isset($options['position'])){
                $options['position'] = "html";
            }

/ *这里是改变的部分:用$ options替换“.html(数据)部分['position'] * /

            $success .= $this->jQueryObject . '("' . $options['update'] . '").' . $options['position'] . '(data);';
            if (!$wrapCallbacks) {
                $success = 'function (data, textStatus) {' . $success . '}';
            }
            $options['dataType'] = 'html';
            $options['success'] = $success;
            unset($options['update']);
        }
        $callbacks = array('success', 'error', 'beforeSend', 'complete');
        if (!empty($options['dataExpression'])) {
            $callbacks[] = 'data';
            unset($options['dataExpression']);
        }
        $options = $this->_prepareCallbacks('request', $options);
        $options = $this->_parseOptions($options, $callbacks);
        return $this->jQueryObject . '.ajax({' . $options . '});';
    }

在您的视图中,您可以使用位置选项:

$this->Js->link('+ Add file', array(
    'action' => 'add_file'
  ), array(
    'update' => '#files',
    'position' => 'append'
));