Просмотр исходного кода

ZF-6148: Fix programmatic creation of combobox/filteringselect data stores

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@16134 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 16 лет назад
Родитель
Сommit
e90964a5a2

+ 14 - 5
library/Zend/Dojo/View/Helper/ComboBox.php

@@ -70,8 +70,11 @@ class Zend_Dojo_View_Helper_ComboBox extends Zend_Dojo_View_Helper_Dijit
         }
         if (array_key_exists('store', $params) && is_array($params['store'])) {
             // using dojo.data datastore
-            if (false !== ($store = $this->_renderStore($params['store']))) {
+            if (false !== ($store = $this->_renderStore($params['store'], $id))) {
                 $params['store'] = $params['store']['store'];
+                if ($this->_useProgrammatic()) {
+                    unset($params['store']);
+                }
                 if (is_string($store)) {
                     $html .= $store;
                 }
@@ -90,12 +93,15 @@ class Zend_Dojo_View_Helper_ComboBox extends Zend_Dojo_View_Helper_Dijit
                     $storeParams['params'] = $params['storeParams'];
                     unset($params['storeParams']);
                 }
-                if (false !== ($store = $this->_renderStore($storeParams))) {
+                if (false !== ($store = $this->_renderStore($storeParams, $id))) {
                     if (is_string($store)) {
                         $html .= $store;
                     }
                 }
             }
+            if ($this->_useProgrammatic()) {
+                unset($params['store']);
+            }
             $html .= $this->_createFormElement($id, $value, $params, $attribs);
             return $html;
         }
@@ -113,7 +119,7 @@ class Zend_Dojo_View_Helper_ComboBox extends Zend_Dojo_View_Helper_Dijit
      * @param  array $params 
      * @return string|false
      */
-    protected function _renderStore(array $params)
+    protected function _renderStore(array $params, $id)
     {
         if (!array_key_exists('store', $params) || !array_key_exists('type', $params)) {
             return false;
@@ -138,8 +144,11 @@ class Zend_Dojo_View_Helper_ComboBox extends Zend_Dojo_View_Helper_Dijit
                 $js = 'var ' . $storeParams['jsId'] . ' = '
                     . 'new ' . $storeParams['dojoType'] . '('
                     .     Zend_Json::encode($extraParams)
-                    . ");\n";
-                $this->dojo->addJavascript($js);
+                    . ");\n"
+                    . 'dijit.byId("' . $id . '").attr("store", ' 
+                    . $storeParams['jsId'] . ');';
+                $js = "function() {\n$js\n}";
+                $this->dojo->prependOnLoad($js);
             }
             return true;
         }

+ 3 - 3
tests/Zend/Dojo/View/Helper/ComboBoxTest.php

@@ -163,7 +163,7 @@ class Zend_Dojo_View_Helper_ComboBoxTest extends PHPUnit_Framework_TestCase
         $this->assertNotNull($this->view->dojo()->getDijit('elementId'));
 
         $found = false;
-        $scripts = $this->view->dojo()->getJavascript();
+        $scripts = $this->view->dojo()->getOnLoadActions();
         foreach ($scripts as $js) {
             if (strstr($js, 'var stateStore = new ')) {
                 $found = true;
@@ -202,7 +202,7 @@ class Zend_Dojo_View_Helper_ComboBoxTest extends PHPUnit_Framework_TestCase
     {
         Zend_Dojo_View_Helper_Dojo::setUseProgrammatic(true);
         $html = $this->getElementAsRemoter();
-        $js   = $this->view->dojo()->getJavascript();
+        $js   = $this->view->dojo()->getOnLoadActions();
         $storeDeclarationFound = false;
         foreach ($js as $statement) {
             if (strstr($statement, 'var stateStore = new ')) {
@@ -210,7 +210,7 @@ class Zend_Dojo_View_Helper_ComboBoxTest extends PHPUnit_Framework_TestCase
                 break;
             }
         }
-        $this->assertTrue($storeDeclarationFound, 'Store declaration not found');
+        $this->assertTrue($storeDeclarationFound, 'Store definition not found');
     }
 }