【发布时间】:2014-05-28 09:21:36
【问题描述】:
我使用的是 CakePHP 2.4.7 版
我像这样使用Js 助手
$this->Js->link('+ Add file', array('action' => 'add_file'), array('update' => '#files'))
问题是我想用返回的数据附加#files 内容而不是替换。
如果有任何解决方法,请告诉我。
【问题讨论】:
我使用的是 CakePHP 2.4.7 版
我像这样使用Js 助手
$this->Js->link('+ Add file', array('action' => 'add_file'), array('update' => '#files'))
问题是我想用返回的数据附加#files 内容而不是替换。
如果有任何解决方法,请告诉我。
【问题讨论】:
它适用于 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。
我在这里找到了解决方案: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'
));
【讨论】: