【问题标题】:Js->link append data instead of updateJs->链接追加数据而不是更新
【发布时间】:2014-05-28 09:21:36
【问题描述】:

我使用的是 CakePHP 2.4.7 版

我像这样使用Js 助手

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

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

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

【问题讨论】:

    标签: jquery cakephp


    【解决方案1】:

    它适用于 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);
    
    ----------
    

    希望对你有用!

    【讨论】:

    • 感谢您的建议。 appendChild 不起作用。我在我的 CakePHP 2.4 上找不到 Js->request
    【解决方案2】:

    我在这里找到了解决方案: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['position'] */

    替换 ".html(data) 部分
                $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'
    ));
    

    【讨论】:

    • 谢谢劳莫斯。我稍后会检查你的答案。
    猜你喜欢
    • 2017-10-27
    • 2022-01-01
    • 2017-05-24
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多