1

ツリーに新しいノードを挿入したいと思います。Sencha ライブラリ バージョン 4 で開発しています。TreeNode が動作していないようです... Firebug エラー:

Erreur : キャッチされない例外: Ext.Loader が有効になっていないため、依存関係を動的に解決できません。必要なクラスがありません: Ext.tree.TreeNode

Loader config enable : true を追加しました。それもうまくいきません...!

私のコード:

    /*Ext.Loader.setConfig({
            enabled: true
});
*/
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(){

     Ext.QuickTips.init();

        Ext.define('Task', {
            extend : 'Ext.data.Model',
            fields : [ 
                { name : 'id', type :'int'},
                { name : 'task', type : 'string' },
                { name : 'material', type : 'string'},
                {name : 'cc' ,  type : 'string'},
                { name : 'date_debut', type : 'string'}
            ]
        });

        var store = Ext.create('Ext.data.TreeStore',{

                model : 'Task',
                proxy : {
                    type : 'ajax',
                    url : 'myjson.json'

                },
                folderSort: true
        });

        var tree = Ext.create('Ext.tree.TreePanel',{

            title : 'Task Manager',
            width :1000,
            height : 400,
            //renderTo : Ext.getBody(),
            collapsible : true,
            useArrows : true,
            rootVisible : false,
            store : store,
            multiSelect : true,
            itemId : 'id',
            singleExpand : true,
            tbar : [
                {
                    xtype : 'button' , text : 'ADD TASK ', 
                    handler : function(){ 

                        var selectedItem = tree.getSelectionModel().getSelection();

                            if(!selectedItem){

                                selectedItem = tree.getRootNode();
                            }

                            handleCreate = function(btn, text,cBoxes){
                                if(btn=='ok' && text){

                                        //alert('oui');
                                        //var newNode = new Ext.tree.TreeNode({});
                                        var newNode = Ext.create('Ext.tree.TreeNode',{

                                                id : '0',
                                                task : text,
                                                material : 'New Material',
                                                cc : 'new CC',
                                                date_debut :'00/00/00',

                                                leaf : false,
                                                allowChildren : false
                                        });
                                        if(selectedItem.isLeaf()) {
                                            selectedItem.parentNode.insertBefore(newNode, selectedItem.nextSibling);
                                        } else {
                                            selectedItem.insertBefore(newNode, selectedItem.firstChild);
                                        }
                                }else{
                                    alert('non');
                                }

                            }
                        Ext.MessageBox.show({
                            title:'Add new Folder Item',
                            msg: 'Name of Folder Item:',
                            buttons: Ext.MessageBox.OKCANCEL,
                            prompt:true,
                            fn: handleCreate
                        });
                        }

                }

            ],
            listeners : {
                itemclick : function(a,b,c,d,e){
                        var size = b.length;
                    //  alert(d + ' ' + b.toString()+' b size = '+size+' e ' + e + ' a ' + a);
                        if( b instanceof Task){
                                // Form = les champs dans le form editable
                                var form = fields.getForm();
                                //Chaque field de la zone d'edition
                                var fId = form.findField('id');
                                var ftask = form.findField('task');
                                var fmaterial = form.findField('material');
                                var fcc = form.findField('cc');
                                var fStartDate = form.findField('start_date');

                                fId.setValue(b.get('id'));
                                ftask.setValue(b.get('task'));
                                fmaterial.setValue(b.get('material'));

                        }

                }
            },
            //plugins: [cellEditing],

            columns : [{
                text : 'ID',
                dataIndex : 'id',
                sortable : true,
                width : 50      
            },{
                xtype : 'treecolumn',
                text : 'Task',
                flex : 2,
                sortable : true,
                dataIndex : 'task',
                width : 100
            },
            {
                text : 'Material',
                dataIndex : 'material',
                width : 100
            },
            {
                text :  'CC',
                dataIndex : 'cc',
                width : 100

            },
            {
                text : 'Date_Debut',
                dataIndex : 'date_debut',
                width : 100
            }]                          


        });
        var states = Ext.create('Ext.data.Store', {
        fields: ['abbr', 'name'],
        data : [
            {"abbr":"AL", "name":"Alabama"},
            {"abbr":"AK", "name":"Alaska"},
            {"abbr":"AZ", "name":"Arizona"}

            ]
        });



        var fields = Ext.create('Ext.form.Panel',{

            frame : true,
            title : 'Editing Zone',
            width : 1000,
            fieldDefaults : {
                msgTarget : 'side',
                labelWidth : 75
            },
            defaultType : 'textfield',
            defaults : {
                    anchor : '100%'
            },


            items : [
            //TaskName
            {
                fieldLabel : 'TaskName',
                name : 'task',
                allowBlank : false 
            },{
                xtype: 'combo',
                name : 'material',
                fieldLabel: 'Choose Material',
                store: states,
                queryMode: 'local',
                displayField: 'name',
                valueField: 'abbr'
            },{

                xtype:'datefield',
                anchor : '100%',
                disabledDays:  [0, 6],
                fieldLabel : 'date_debut'

            },{
                xtype : 'hiddenfield',
                name : 'id'


            }],
                layout: 'hbox',
                buttons: [{
                    text: 'Reset',
                    handler: function() {
                        this.up('form').getForm().reset();
                    }
                    }, {
                        text: 'Submit',
                        formBind: true, //only enabled once the form is valid

                        handler: function() {


                            var id =this.up('form').getForm().findField('id');
                            var id2 = id.getValue();
                            var node  = tree.getSelectionModel().getSelection();

                            alert(node);
                        }

            }],

        });
        fields.render('mesfields');
        tree.render('mongrid');


});
4

3 に答える 3

8

これはもともと 3.x のコードで、4.0 に変換していると思いますか? TreeNode クラスは 4.0 には存在しません。代わりに、標準の Model インスタンスを作成し、それをツリーに追加します。4.0 では、ツリーのモデル (3.x のレコード) は新しい NodeInterface クラスで「装飾」されます。つまり、モデル オブジェクトがツリーで使用される場合、ノード API も持つことになります。つまり、モデル自体とは別の TreeNode オブジェクトは必要ありません。

于 2011-04-20T01:25:09.420 に答える
7

こんにちは、私は同様の問題を抱えていて、見つかったドキュメントを調べていました:

私の場合、Ext.data.NodeInterface は treePanel のノードです。ルート ノードを取得し、apendChild メソッドで子を追加します。

Ext.Ajax.request({
    loadMask: true,
    url: 'index.php?X=1',
    success: function (resp) {
        var t = Ext.decode(resp.responseText);
        root = Ext.getCmp('tree-panel').getRootNode(); //get the root node
        for (i = 0; i < t.length; i++) {
            root.appendChild({
                id: i,
                text: t[i],
                leaf: true
            }); //add childs
        }
        Ext.get(document.body).unmask();
    }
});

私はその容易さを見ることができます。NodeInterface には他にも便利なメソッドがあります:)

于 2011-10-10T03:23:29.590 に答える
2

エラーがわかりません。コードをテストしていないためです...

しかし、このフォーラムから、 ...のようなExt.requireスクリプトを含めるという結論を得ましたfile system

Ext.require([
    'Ext.form.*',
    'Ext.tree.*',
]);

それは、すべての jssrc/form/src/tree/ 詳細情報を含めることを意味します

あなたが得るエラーは、 (私のローカル)var newNode = Ext.create('Ext.tree.TreeNode',{
にTreeNode.jsがないためです。C:\xampp\htdocs\ext-4b3\src\tree

于 2011-04-19T17:06:03.407 に答える