слушатель магазина не может загрузить другой магазин extjs 4 - PullRequest
0 голосов
/ 09 марта 2012

участник форума

Я выполняю задачу, в рамках которой Магазин загружает другой магазин изнутри.На самом деле мне нужны данные из другого хранилища.

У меня есть assigningStore как

Ext.define('gantt.store.assignmentStore', {
    extend : 'Ext.data.Store',

        model : 'gantt.model.Assignment',
        autoLoad : true,

        // Must pass a reference to resource store
        resourceStore : Ext.create('gantt.store.resourceStore'),
        proxy : {
            method: 'GET',
            type : 'ajax',
            api: {
                read : 'projectmanagement/data/assignmentdata.js'//,
                //create : 'foo.js',
                //update : 'foo.js',
                //destroy : 'foo.js'
            },
            reader : {
                type : 'json',
                root : 'assignments'
            }
        },
        listeners : {
            load : function() {
                this.resourceStore.loadData(this.proxy.reader.jsonData.resources);
            }
        }
});

, а мой resourceStore равен

Ext.define('gantt.store.resourceStore', {
    extend : 'Ext.data.JsonStore',
    model   : 'gantt.model.Resource'    
});

мое значение assignmentData

{
    "assignments" : [
        {
            "Id" : 1,
            "TaskId" : 4,
            "ResourceId" : 1,
            "Units" : 100
        },
        {
            "Id" : 2,
            "TaskId" : 4,
            "ResourceId" : 2,
            "Units" : 80
        },
        {
            "Id" : 3,
            "TaskId" : 11,
            "ResourceId" : 5,
            "Units" : 50
        },
        {
            "Id" : 4,
            "TaskId" : 12,
            "ResourceId" : 6,
            "Units" : 50
        }
    ],

    "resources" : [
        {"Id" : 1, "Name" : "Mats" },
        {"Id" : 2, "Name" : "Nickolay" },
        {"Id" : 3, "Name" : "Goran" },
        {"Id" : 4, "Name" : "Dan" },
        {"Id" : 5, "Name" : "Jake" },
        {"Id" : 6, "Name" : "Kim" },
        {"Id" : 7, "Name" : "Bart" }
    ]
}

мой код resourcePanel ниже

Ext.define('CustomAssignmentCellEditor', {
    extend : "Gnt.widget.AssignmentCellEditor",

    show: function(){
        console.log('SHOW ', this.resourceStore.getCount());

        this.callParent(arguments);
    }
});

Ext.define('gantt.view.resourcemgt.resourcePanel',{
    extend: 'Gnt.panel.Gantt',
    alias: 'widget.resourcepanel',

    requires: [
        'Gnt.panel.Gantt',
        'Sch.plugin.TreeCellEditing',
        'Gnt.column.PercentDone',
        'Gnt.column.StartDate',
        'Gnt.column.EndDate',
        'Gnt.widget.AssignmentCellEditor',
        'Gnt.column.ResourceAssignment',
        'Gnt.model.Assignment'
    ],

    height : 400,
    width: 1000,
    multiSelect : true,
    highlightWeekends : true,
    showTodayLine : true,
    loadMask : true,
    enableDependencyDragDrop : false,
    snapToIncrement : true,

    startDate : new Date(2010,0,11), 
    endDate : Sch.util.Date.add(new Date(2010,0,11), Sch.util.Date.WEEK, 20), 
    viewPreset : 'weekAndDayLetter',

        // Object with editor and dataIndex defined
        leftLabelField : {
        dataIndex : 'Name',
        editor : { xtype : 'textfield' }
    },

    // ... or an object with editor and renderer defined
    rightLabelField : {
        dataIndex : 'Id',
        renderer : function(value, record) {
        return 'Id: #' + value;
    }
    },


    initComponent: function() {
        var me = this;
        var resourceStore = Ext.create('gantt.store.resourceStore');
        var assignmentStore = Ext.create('gantt.store.assignmentStore');
        var taskStore = Ext.create('gantt.store.taskStore');

         var assignmentEditor = Ext.create('CustomAssignmentCellEditor', {
                assignmentStore : assignmentStore,
                resourceStore : resourceStore
            });

        Ext.apply(me, {
                resourceStore : resourceStore,
                assignmentStore : assignmentStore,
                taskStore : taskStore,
                stripeRows : true,

                plugins: [
                            Ext.create('Sch.plugin.TreeCellEditing', { 
                                 clicksToEdit: 1
                             })
                          ],

            eventRenderer : function(task) {
                if (assignmentStore.findExact('TaskId', task.data.Id) >= 0) {
                    // This task has resources assigned, show a little icon
                    return {
                        ctcls : 'resources-assigned'
                    };
                }
            },

         // Setup your static columns
            columns : [
                {
                    xtype : 'treecolumn',
                    header : 'Tasks', 
                    dataIndex : 'Name', 
                    width:250
                },
                {
                    header : 'Assigned Resources', 
                    width:150, 
                    editor : assignmentEditor,
                    xtype : 'resourceassigmentcolumn'
                }
            ],

            tbar : [
                    {
                        text : 'Indent',
                        iconCls : 'indent',
                        handler : function() {
                            var sm = g.lockedGrid.getSelectionModel();
                            sm.selected.each(function(t) {
                                t.indent();
                            });
                        }
                    },
                    {
                        text : 'Outdent',
                        iconCls : 'outdent',
                        handler : function() {
                            var sm = g.lockedGrid.getSelectionModel();
                            sm.selected.each(function(t) {
                                t.outdent();
                            });
                        }
                    }
                ]
        });

        me.callParent(arguments);

    }
});

моя модель ресурсов

Ext.define('gantt.model.Resource', {
    extend : 'Gnt.model.Resource'
});

На самом деле в моем приложении у меня есть сетка, которая отображает все данные из AssignmentStore, и у сетки был один столбец с выпадающим списком, чьи данные получены из ResourceStore.

Так что я работал с предыдущим кодом, ноResourceStore не загружается, поэтому в моем раскрывающемся окне выбора отображается пустой выпадающий список.

Пожалуйста, предложите мне какое-нибудь решение, которое я могу попытаться решить.

1 Ответ

0 голосов
/ 11 марта 2012

Вот ваш второй магазин, загруженный данными из первого события загрузки магазина, который отвечает на заданный вами вопрос: http://jsfiddle.net/dbrin/bQvyg/5/embedded/result/

Что происходит с вашим списком, мне не ясно. Вам нужно разбить ваш код на более мелкие части, чтобы вы могли понять, что происходит. Ваши объекты модели расширяют другие объекты модели, поэтому я ничего не могу о них рассказать. То же самое касается панелей - они расширяют пользовательские компоненты, не являющиеся частью ExtJS. Вы действительно должны спросить у Bryntum совета. Я предполагаю, что вы пытаетесь расширить их планировщик.

...