开放的编程资料库

当前位置:我爱分享网 > PHP教程 > 正文

将 Dojo 与 Zend Framework 一起使用时的正确层文件

在周三的Dojo和ZF网络研讨会上,Dojo的名人皮特·希金斯(PeteHiggins)指出,我可以在其中一张幻灯片上做一些不同的和更好的事情。

这个特定项目与我在代码中使用自定义Dojo构建层的方式有关。之后我联系了他以了解他的建议,并自己做了一些尝试,并在此过程中发现了更多Dojo和javascript的优点。

有问题的代码如下所示:

Zend_Dojo::enableView($view);
$view->dojo()->setDjConfigOption('usePlainJson', true)
             // ->setDjConfigOption('isDebug', true)
             ->addStylesheetModule('dijit.themes.tundra')
             ->addStylesheet('/js/dojox/grid/_grid/tundraGrid.css')
             ->setLocalPath('/js/dojo/dojo.js')
             ->addLayer('/js/paste/main.js')
             // ->addLayer('/js/paste/paste.js')
             ->registerModulePath('../paste', 'paste')
             ->addJavascript('paste.main.init();')
             ->disable();

他评论的行是addLayer()行。

正如我在网络研讨会中指出的那样,层或自定义构建是Dojo的一个很棒的功能。Dojo是令人难以置信的模块化,并且在很多方面都像一个好的服务器端库应该的那样——只包含需要的东西,并且在需要的时候。问题出现在部署时:用户突然遇到这样一种情况,即应用程序向服务器发出数十个请求以获取所需内容。解决方案是创建自定义构建,将所有依赖项拉入单个文件,插入任何模板,然后在剥离所有空白并压缩之前对代码进行最小化启发式分析。完成后,您现在有一个需要根据请求加载的小文件-使最终部署的应用程序变得活泼。

当我在网络研讨会上展示它时,我注意到在这样做之后,您必须更改代码以指向新构建—这就是我指出的两行的目的。本质上,一个用于开发,另一个用于生产。当然,这只是问题的时机——你忘记在生产中切换注释,或者不小心重新合并开发版本等。

Pete向我展示了另一个更优雅的解决方案,它也去掉了上面那个解决方案中的另一行,addJavascript()

解决方案是将您的代码编写在您将编译到的同一层文件中。这样做时,您可以将所有的dojo.require()语句放在文件中,以及在主模块命名空间中混合你想要的任何代码:

dojo.provide("paste.layer");

/* Dojo modules to require... */
dojo.require("dijit.layout.ContentPane");
/* ... */

/* onLoad actions to perform... */
dojo.addOnLoad(function() {
    paste.upgrade(); 
});

/* mixin functionality to the "paste" namespace: */
dojo.mixin(paste, {
    /* paste.newPasteButton() */
    newPasteButton:  function() {
        var form = dijit.byId("pasteform");
        if (form.isValid()) {
            form.submit(); 
        }
    },
    
    /* ... */
});

在我的原始代码中,我有一个paste.main.init方法来执行我所有的dojo.requiredojo.addOnLoad语句,但这些现在可以简单地从层中分离出来——为我省去了更多的工作。

然后,在创建配置文件时,您只需让它在同一个文件中创建图层——在本例中为paste/layer.js——同时创建一个依赖项在原始图层文件上。编译器将确保将原始代码融入构建中。例如:

dependencies = {
    layers: [
        {
            name: "../paste/layer.js",
            dependencies: [
                "paste.layer",
                /* other dependencies...*/
            ]
        },
    ],
    prefixes: [
        [ "paste", "../paste" ],
        /* other prefixes -- dijit, etc. */
    ]
}

这会将上面的原始ZF代码段更改为:

Zend_Dojo::enableView($view);
$view->dojo()->setDjConfigOption('usePlainJson', true)
             // ->setDjConfigOption('isDebug', true)
             ->addStylesheetModule('dijit.themes.tundra')
             ->addStylesheet('/js/dojox/grid/_grid/tundraGrid.css')
             ->setLocalPath('/js/dojo/dojo.js')
             ->addLayer('/js/paste/layer.js')
             ->registerModulePath('../paste', 'paste')
             ->disable();

并没有短多少——但因为我不再需要担心更改文件名,所以我晚上可以休息得更轻松。

我将在接下来的几周内发布更多诸如此类的技巧,以帮助支持ZendFramework中新的Dojo集成。

未经允许不得转载:我爱分享网 » 将 Dojo 与 Zend Framework 一起使用时的正确层文件

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏