Ext.loader未启用缺少必需的?

时间:2011-04-19 11:28:17

标签: extjs4

我在使用Extjs4 librairie时遇到了一些问题。 我想使用treeEditor组件。

Firebug错误:

  

错误:未捕获的异常:   Ext.Loader未启用,所以   依赖关系无法解决   动态。缺少必修课:   Ext.tree.TreeNode

我的代码:

Ext.require([

'Ext.form.*',
'Ext.grid.*',
'Ext.tree.*',
'Ext.data.*',
'Ext.util.*',
'Ext.loader.*',
'Ext.state.*',
'Ext.layout.container.Column',
'Ext.tab.TabPanel'

]);

Ext.onReady(function(){

    // shorthand
    Ext.QuickTips.init();


    var tree = Ext.create('Ext.tree.TreePanel', {
            animate:false,
            enableDD:false,
    //      loader: new Tree.TreeLoader(), // Note: no dataurl, register a TreeLoader to make use of createNode()
            lines: true,
            rootVisible:false,
        //  selModel: new Ext.tree.MultiSelectionModel(),
            containerScroll: false
    });

        // set the root node
        var root = Ext.create('Ext.tree.TreeNode',{
            text: 'Autos',
            draggable:false,
            id:'source'
        });

        tree.on('contextmenu',showCtx);
        tree.on('click',function(node,e){node.select();return false;});
        // json data describing the tree

        var json = [
                {"text" : "1","allowEdit" : true, "id" : 300, "leaf" : false, "cls" : "folder", "children" : [
                {"text" : "11","allowEdit" : true, "id" : 3000, "leaf" : false, "cls" : "folder","children" :[
                {"text" : "111","allowEdit" : true, "id" : 300, "leaf" : false, "cls" : "folder","children" :[
                {"text" : "1111","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"},
                {"text" : "1112","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"},
                {"text" : "1113","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"}
                ]},
                {"text" : "112","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"},
                {"text" : "113","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"}
                ]},
                {"text" : "12","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"},
                {"text" : "13","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"}
                ]},
                {"text" : "2","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file"},
                {"text" : "3","allowEdit" : true, "id" : 300, "leaf" : true, "cls" : "file",iconCls:'node'}
                ];

                for(var i = 0, len = json.length; i < len; i++) {
                root.appendChild(tree.getLoader().createNode(json[i]));
                }

        var ge = Ext.create('Ext.tree.TreeEditor',tree,{},{
            allowBlank:false,
            blankText:'Nom du dossier',
            selectOnFocus:true,
            cancelOnEsc:true,
            completeOnEnter:true,
            ignoreNoChange:true,
            updateEl:true
            });

            /*ge.on('beforestartedit', function(){

            if(!ge.editNode.attributes.allowEdit){
                return false;
            }
                });*/

        tree.setRootNode(root);
        tree.render();
        root.expand(true);

        });

谢谢:)

4 个答案:

答案 0 :(得分:50)

错误是由于未启用Loader。您可以通过以下方式启用Ext.Loader:

Ext.Loader.setConfig({enabled:true});

您需要在onReady方法的开头调用此方法。

答案 1 :(得分:2)

这在ExtJs 4中对我有用。只需将Ext.Loader.setConfig({enabled:true});添加到a​​pp.js的顶部。

答案 2 :(得分:1)

真正的问题是你正在使用ext-debug.js,ext.js

改为使用:ext-all.js或ext-dev.js

关于动态加载的阅读

index.html示例:

<html>
  <head>
      <title>Hello Ext</title>
      <link rel="stylesheet" type="text/css" href="ext-4/resources/css/ext-all.css">
      <script type="text/javascript" src="ext-4/ext-dev.js"></script>
      <script type="text/javascript" src="app.js"></script>
  </head>
  <body></body>
</html> 

在该示例中,您不需要启用动态加载,因为动态加载它用于开发环境。 ext-all.js,ext.js用于部署。 ext-all-debug.js和ext-debug.js用于部署后的调试。

MVC和动态加载在部署中没用,因为你必须有一个由sencha cmd(aka Sencha Tools)生成的文件。

答案 3 :(得分:1)

我看了这个,因为我是一名ExtJS新手而不得不退后一步。我还不清楚在OnReady电话会议上关于它的广义声明的说法。

版本5.0的Sencha API Docs网站上的以下内容也显示了此示例,以便很好地理解对Ext.Loader类的调用的放置。在我看来,它有点过分夸大了多个JavaScript标签。

<script type="text/javascript" src="ext-core-debug.js"></script>
<script type="text/javascript">
    Ext.Loader.setConfig({
      enabled: true,
      paths: {
          'My': 'my_own_path'
      }
    });
</script>
<script type="text/javascript">
    Ext.require(...);

    Ext.onReady(function() {
      // application code here
    });
</script>

我对自己的个人代码所做的更改我添加如下,它也运行良好。这非常简单。

Ext.Loader.setConfig({enabled:true});

Ext.application({
    name                : 'MyApp',
    appFolder           : 'app',
    controllers         : [
        'MyApp.controller.item.Item'
    ],
    autoCreateViewport  : true

});

如果您遇到Loader问题,那么您可能也想查看Ext.require和Ext.exclude类,以了解这些类如何交互以加载您的自定义类。