0

我在 Zend 框架的 ajax 响应中重新解析我的 dojo 元素时遇到了很多问题。我有一个简单的validationTextBox 和一个提交按钮。首次呈现索引页面时,所有 dojo/dijit tundra 样式/属性等都被正确解析。但是,当我有一个重建 dojo 表单并将其发布回索引视图的 ajax 调用时。表格如果可以发回,但苔原风格不再起作用。我尝试了很多不同的事情,但花了很多时间却一无所获。我提前感谢任何试图提供帮助的人。我在这篇文章中添加了一个最简单的例子来解释。

布局.phtml

<?php
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo $this->doctype();
?>
<html>
    <head>
    <meta content="text/html; charset=UTF-8" />
    <script>
    function showForm()
    {
    dojo.xhrGet( {
            url: "../public/index.php?ajax=true",
        // The load function is called on successful response from server
        // It inserts the response to the HTML div “put_here” placeholder
        handleAs:"text",
        sync:true,
            load: function(response, ioArgs)
                    { dojo.byId("welcome").innerHTML = response;
                    return response; 
                },
                // The error function displays error message if server does not
        // respond right
            error: function(response, ioArgs)
            {
            console.error("HTTP status code: ", ioArgs.xhr.status);
            return response;
            }
            });

    //     dojo.parser.parse(dojo.byId("welcome"));
    }
    </script>
    <?php
    echo $this->headTitle();
    echo $this->headStyle();
    echo $this->headScript();
    echo $this->dojo()->setDjConfigOption('parseOnLoad', true);
    echo $this->dojo()->addStyleSheetModule('dijit.themes.tundra');
    echo $this->dojo();                
    ?>
</head>
<body class='tundra'>     
    <div id='ajaxcontent'>
    <?php  echo $this->layout()->content; ?>
    </div>
</body>

索引控制器.php

<?php

//require_once '../public/js/custom.js';
class IndexController extends Zend_Controller_Action
{
public function init()
{
    $ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('index', 'html')
                ->initContext();
}

public function indexAction()
{                       

    $form = new Zend_Dojo_Form('dojoForm', array('dojotype'=> 'dijit.layout.ContentPane'));    
    $element = new Zend_Dojo_Form_Element_ValidationTextBox('TestBoxName', 
                                                                array(
                                                                    'id' => 'TextBoxId',
                                                                    'required' => true
                                                                )
                                                                );
    $button = new Zend_Dojo_Form_Element_Button('TestButton',
                                                    array(
                                                        'value'=> 'Button',
                                                        'onclick' => 'showForm()'
                                                    ));                                              
    $form->addElements(array($element,$button));       
        $this->view->form = $form;
}
}

查看 index.phtml

<div id="welcome" >
<?php
echo $this->form;
?>

4

1 回答 1

0

尝试通过http://validator.w3.org/运行您的页面- 它可能是 DOCTYPE,以及非封闭标签的问题?

addStyleSheetModule简单地添加了一个css文件,你<body>断言的类,body下面的所有节点都“继承”了主题(CSS选择器)。然而,选择器高度依赖于结构良好的 DOM(因此验证)

但这里的主要问题似乎是没有设置 dijit 类 - 可能是因为 data-dojo-type 没有初始化。有两种方法

1.1 在 layout.phtml 中

function showForm() { dijit.byId('welcome').set('href', '../public/index.php?ajax=true'); }

1.2 在 index.phtml 中

在您的中创建一个内容窗格(默认为 parseOnLoad)<div id='welcome'..

<div id="welcome" data-dojo-type="dijit.layout.ContentPane">

2.0 手动调用解析器

load: function(response, ioArgs)
   { var domnode = dojo.byId("welcome");
     domnode.innerHTML = response;
     dojo.parser.parse(domnode);
     return response; 
   }
于 2012-07-15T23:42:25.840 回答