Adding querystring creation and option mapping to jquery engine.

More complex ajax requests can now be done.
This commit is contained in:
mark_story 2009-03-15 13:08:29 -04:00
parent 72866966b0
commit e873bb5ab9
3 changed files with 36 additions and 4 deletions

View file

@ -27,6 +27,18 @@
App::import('Helper', 'Js'); App::import('Helper', 'Js');
class JqueryEngineHelper extends JsBaseEngineHelper { class JqueryEngineHelper extends JsBaseEngineHelper {
/**
* Option mappings for jQuery
*
* @var array
**/
var $_optionMap = array(
'request' => array(
'type' => 'dataType',
'complete' => 'success',
'request' => 'beforeSend',
)
);
/** /**
* Create javascript selector for a CSS rule * Create javascript selector for a CSS rule
* *
@ -124,10 +136,11 @@ class JqueryEngineHelper extends JsBaseEngineHelper {
$url = $this->url($url); $url = $this->url($url);
$options = $this->_mapOptions('request', $options); $options = $this->_mapOptions('request', $options);
if (isset($options['data']) && is_array($options['data'])) { if (isset($options['data']) && is_array($options['data'])) {
//handle data array to query string. $options['data'] = $this->_toQuerystring($options['data']);
} }
$options['url'] = $url; $options['url'] = $url;
$options = $this->_parseOptions($options); $callbacks = array('success', 'error', 'beforeSend', 'complete');
$options = $this->_parseOptions($options, $callbacks);
return '$.ajax({' . $options .'});'; return '$.ajax({' . $options .'});';
} }
} }

View file

@ -591,7 +591,7 @@ class JsBaseEngineHelper extends AppHelper {
$out = array(); $out = array();
foreach ($options as $key => $value) { foreach ($options as $key => $value) {
if (!is_int($value) && !in_array($key, $safeKeys)) { if (!is_int($value) && !in_array($key, $safeKeys)) {
$value = '"' . $this->escape($value) . '"'; $value = $this->value($value);
} }
$out[] = $key . ':' . $value; $out[] = $key . ':' . $value;
} }
@ -618,6 +618,25 @@ class JsBaseEngineHelper extends AppHelper {
} }
return $options; return $options;
} }
/**
* Convert an array of data into a query string
*
* @param array $parameters Array of parameters to convert to a query string
* @return string Querystring fragment
* @access protected
**/
function _toQuerystring($parameters) {
$out = '';
$keys = array_keys($parameters);
$count = count($parameters);
for ($i = 0; $i < $count; $i++) {
$out .= $keys[$i] . '=' . $parameters[$keys[$i]];
if ($i < $count - 1) {
$out .= '&';
}
}
return $out;
}
} }

View file

@ -147,7 +147,7 @@ class JqueryEngineHelperTestCase extends CakeTestCase {
'type' => 'json', 'type' => 'json',
'data' => array('name' => 'jim', 'height' => '185cm') 'data' => array('name' => 'jim', 'height' => '185cm')
)); ));
$expected = '$.ajax({url:"/people/edit/1", method:"post", success:doSuccess, error:handleError, dataType:"json", data:"name=jim&height=185cm"});'; $expected = '$.ajax({method:"post", error:handleError, data:"name=jim&height=185cm", dataType:"json", success:doSuccess, url:"/people/edit/1"});';
$this->assertEqual($result, $expected); $this->assertEqual($result, $expected);
} }
} }