19

我对 Extjs4 库有一些问题。我想使用 treeEditor 组件。

萤火虫错误:

错误:未捕获的异常:未启用 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

4 回答 4

50

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

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

您需要在方法开始时调用它onReady

于 2011-04-19T11:56:27.907 回答
2

这在 ExtJs 4 中对我有用。刚刚添加Ext.Loader.setConfig({enabled:true});到 app.js 的顶部。

于 2012-09-02T05:19:13.067 回答
1

我看了看这个,不得不退后一步,因为我是 ExtJS 新手。在 OnReady 调用之前,我不清楚关于放置它的广义声明的说法。

Sencha API Docs网站上 5.0 版的以下内容也显示了此示例,以便更好地理解调用 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 类,以了解它们如何交互以加载您的自定义类。

于 2014-08-28T16:21:40.070 回答
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 和动态加载在部署中没有用,因为您必须有 1 个由 sencha cmd(又名 Sencha 工具)生成的文件。

于 2012-11-12T22:15:40.803 回答