0

我正在开发 Sencha Touch 应用程序。这个应用程序有 3 个列表:客户、任务和任务。每个人都有自己的模型和商店。第三个,分配列表,是对客户的任务分配,因此该列表必须显示分配了哪个任务和客户。

楷模

Ext.define('TasksApp.model.Asignation',{
extend: 'Ext.data.Model',
config: {
    idProperty: 'id',
    fields:     [
        {name: 'asignID'},
        {name: 'nombreasignacion', type: 'string'},
        {name: 'clienteasignacion', type: 'string'},
        {name: 'tareaasignacion', type: 'string'},
        {name: 'finasignacion', type: 'date'},  
        {name: 'obsasignacion', type: 'string'},
        {name: 'recordatorio', type: 'string'}, 
        {name: 'estadoasignacion', type: 'string'}  
    ],

}
});


Ext.define('TasksApp.model.Client',{
extend: 'Ext.data.Model',
config: {
    idProperty: 'id',
    fields:     [
        {name: 'clientID'},  
        {name: 'nombrecliente', type: 'string'},
        {name: 'obscliente', type: 'string'},
        {name: 'tlfcliente', type: 'int'},
        {name: 'emailcliente', type: 'string'},
        {name: 'urlcliente', type: 'string'},
        {name: 'asigncliente', type: 'int', defaultValue: 0}    
    ],

}
});


Ext.define('TasksApp.model.Task',{
extend: 'Ext.data.Model',
config:
{
    idProperty: 'id',
    fields:     [
        {name: 'tareaID'}, 
        {name: 'nombretarea', type: 'string'},
        {name: 'descripciontarea', type: 'string'},
        {name: 'tdesarrollotarea', type: 'int'},
        {name: 'asigntarea', type: 'int', defaultValue: 0}  
    ],      
}
});

分配列表视图 + 分配模板

var plantillaAsignacion = new Ext.XTemplate(
'<tpl for=".">',
'<div class="tplAsignacion">',
    '<div class="asignacionCabecera">',
        '<DIV ALIGN=center><B><I>{nombreasignacion}</i></B></DIV>',
    '</div>',
    '<div class="clienteCuerpo">',
        '<div class="asignacionImagen" style= "float: left;"><img src="resources/images/asign_icon.png"/></div>',
        '<ol>',
            '<li><pre> Cliente: {clienteasignacion}</a></pre></li>',
            '<li><pre> Tarea: {tareaasignacion}</pre></li>',
            '<li><pre>  Finalización: {finasignacion:date("d/m/Y")}<div align="right">Estado: {estadoasignacion} <span class="status {estadoasignacion}"></span>   </pre></li>',        //("l, F d, Y")("d/m/Y")
        '</ol>',
    '</div>',
'</div>',
'</tpl>'
);

Ext.define('TasksApp.view.AsignationsList', {
extend: 'Ext.Container',
requires: [ 'Ext.TitleBar', 'Ext.dataview.List' ],
alias: 'widget.asignationslistview',

config: {
    layout: {
        type: 'fit',
    },
    items: 
    [
        {
            xtype: 'titlebar',
            title: 'Lista de asignaciones',
            docked: 'top',
            items: 
            [
                {
                    xtype: 'button',
                    iconCls: 'add',
                    ui: 'action',
                    itemId: 'newButton',
                    align: 'right'
                },{
                    xtype: 'button',
                    text: 'Clientes',
                    ui: 'action',
                    itemId: 'goToClients', iconCls: 'team',
                    align: 'left'
                },
                {
                    xtype: 'button',
                    text: 'Tareas',
                    ui: 'action',
                    itemId: 'goToTasks', iconCls: 'bookmarks',
                    align: 'left'
                },
            ]               
        },
        {
            xtype: 'list',
            store: 'Asignations',   
            itemId: 'asignationsList',              
            cls: 'estado-asignacion', 
            loadingText: 'Cargando Asignaciones...',
            emptyText: 'No hay asignaciones actualmente',
            onItemDisclosure: true,
            //grouped: true,
            itemTpl: plantillaAsignacion,
        }
    ],
    listeners: 
    [
        {
            delegate: '#newButton',
            event: 'tap',
            fn: 'onNewButtonTap'
        }, 
        {
            delegate: '#asignationsList',
            event: 'disclose',
            fn: 'onAsignationsListDisclose'
        },
        {
            delegate: '#goToClients',
            event: 'tap',
            fn: 'onGoToClients'
        },
        {
            delegate: '#goToTasks',
            event: 'tap',
            fn: 'onGoToTasks'
        }           
    ]
},
onNewButtonTap: function () {
    console.log('newAsignationCommand');
    this.fireEvent('newAsignationCommand', this);
},
onAsignationsListDisclose: function (list, record, target, index, evt, options) {
    console.log('editAsignationCommand');
    this.fireEvent('editAsignationCommand', this, record);
},
onGoToClients: function () {
    console.log ('goToClientsCommand');
    this.fireEvent('goToClientsCommand', this);
},
onGoToTasks: function () {
    console.log ('goToTasksCommand');
    this.fireEvent('goToTasksCommand', this);
}
});

分配编辑器视图(分配的形式)

Ext.define('TasksApp.view.AsignationEditor', {
extend: 'Ext.form.Panel',
requires: [ 
    'Ext.TitleBar', 'Ext.form.FieldSet', 'Ext.field.Text','Ext.field.Select', 'Ext.field.DatePicker', 'Ext.field.TextArea','Ext.form.Panel'     
],
alias: 'widget.asignationeditorview',
config: {
    scrollable: 'vertical',
    items: 
    [
        {
            xtype: 'titlebar',
            docked: 'top',
            title: 'Editar Asignación',
            items:
            [
                {
                    xtype: 'button',
                    ui: 'back',
                    text: 'Volver',
                    itemId: 'backButton',
                    align: 'left'
                },
                {
                    xtype: 'button',
                    ui: 'action',
                    text: 'Guardar',
                    itemId: 'saveButton',
                    align: 'right'
                }
            ]
        },
        {
            xtype: 'toolbar',
            docked: 'bottom',
            items: [
                {
                    xtype: 'button',
                    iconCls: 'trash',
                    iconMask: true,
                    itemId: 'deleteButton'
                }
            ]
        },
        {
            xtype: 'fieldset', 
            items:
            [
                {
                    xtype: 'textfield',
                    name: 'nombreasignacion',
                    label: 'Nombre', 
                    required: true, 
                    autoCapitalize: true,
                    placeHolder: 'Nombre de la asignación...'
                },
                {
                    xtype: 'selectfield',
                    name: 'clienteasignacion',      
                    label: 'Cliente',
                    valueField: 'clientID',
                    displayField: 'nombrecliente',
                    store: 'Clients',       
                    autoSelect: false,
                    placeHolder: 'Seleccione un cliente...',
                    required: true, 
                },
                {
                    xtype: 'selectfield',
                    name: 'tareaasignacion',
                    label: 'Tarea',
                    valueField: 'tareaID',
                    displayField: 'nombretarea',
                    store: 'Tasks',
                    autoSelect: false,
                    placeHolder: 'Seleccione una tarea...',
                    required: true, 

                },      
                {
                    xtype: 'datepickerfield',
                    name: 'finasignacion',
                    label: 'Vencimiento', 
                    dateFormat: 'd/m/Y',
                    value: (new Date()), 

                    picker:
                    {
                        yearFrom: new Date().getFullYear(),
                        yearTo: 2040,
                        slotOrder: [ 'day', 'month', 'year' ]
                    }
                },
                {
                    xtype: 'textareafield',
                    name: 'obsasignacion',
                    label: 'Observaciones',
                    autoCapitalize: true,
                    autoCorrect: true,
                    placeHolder: 'Observaciones de la asignación...',
                    maxRows: 5
                }, 
                {
                    xtype: 'selectfield',
                    name: 'recordatorio',
                    label: 'Recordatorio',
                    autoSelect: true,
                    placeHolder: 'Seleccione el método recordatorio...',
                    required: true,
                    options: 
                    [
                        {
                            text: 'Ninguno',
                            value: 0
                        },
                        {
                            text: 'eMail',
                            value: 2                            
                        },
                        {
                            text: 'SMS',
                            value: 1
                        },
                        {
                            text: 'Notificación',
                            value: 3
                        }                           
                    ]
                },
                {
                    xtype: 'selectfield',
                    name: 'estadoasignacion',
                    label: 'Estado',
                    autoSelect: true,
                    placeHolder: 'Seleccione el estado...',
                    required: true,
                    options: 
                    [
                        {
                            text: 'Activa',
                            value: 'Activa'
                        },
                        {
                            text: 'Caducada',
                            value: 'Caducada'                           
                        },
                        {
                            text: 'Cancelada',
                            value: 'Cancelada'
                        },
                        {
                            text: 'Realizada',
                            value: 'Realizada'
                        }                           
                    ]
                },  
            ]                   
        }   
    ],
    listeners: [
        {
            delegate: '#saveButton',
            event: 'tap',
            fn: 'onSaveButtonTap'
        },
        {
            delegate: '#deleteButton',
            event: 'tap',
            fn: 'onDeleteButtonTap'
        },
        {
            delegate: '#backButton',
            event: 'tap',
            fn: 'onBackButtonTap'
        }
    ]
},
onSaveButtonTap: function () {
    console.log('saveAsignationCommand');
    this.fireEvent('saveAsignationCommand', this);
},
onDeleteButtonTap: function () {
    console.log('deleteAsignationCommand');
    this.fireEvent('deleteAsignationCommand', this);
},
onBackButtonTap: function () {
    console.log('backToHomeCommand');
    this.fireEvent('backToHomeCommand', this);
}
});

分配控制器

Ext.define('TasksApp.controller.Asignations', {

extend: 'Ext.app.Controller',

config: {
    refs: {
        asignationsListView: 'asignationslistview',
        asignationEditorView: 'asignationeditorview'
    },
    control: {
        asignationsListView: {
            newAsignationCommand: 'onNewAsignationCommand',
            editAsignationCommand: 'onEditAsignationCommand'
        },
        asignationEditorView: {
            saveAsignationCommand: 'onSaveAsignationCommand',
            deleteAsignationCommand: 'onDeleteAsignationCommand',
            backToHomeCommand: 'onBackToHomeCommand'
        }
    }
},

getSlideLeftTransition: function () {
    return { type: 'slide', direction: 'left' };
},

getSlideRightTransition: function () {
    return { type: 'slide', direction: 'right' };
},

getRandomInt: function (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
},

activateAsignationEditor: function (record) {

    var asignationEditorView = this.getAsignationEditorView();
    asignationEditorView.setRecord(record); // load() is deprecated.
    Ext.Viewport.animateActiveItem(asignationEditorView, this.getSlideLeftTransition());
},

activateAsignationsList: function () {
    Ext.Viewport.animateActiveItem(this.getAsignationsListView(), this.getSlideRightTransition());
},

onNewAsignationCommand: function () {

    console.log('onNewAsignationCommand');

    var now = new Date();
    var asignationId = (now.getTime()).toString() + (this.getRandomInt(0, 100)).toString();

    var newAsignation = Ext.create('TasksApp.model.Asignation', {
        id: asignationId,
        nombreasignacion: '',
        clienteasignacion: '',
tareaasignacion: '',
finasignacion: '',
obsasignacion: '',
recordatorio: '',
estadoasignacion: ''
    });

    this.activateAsignationEditor(newAsignation);

},

onEditAsignationCommand: function (list, record) {

    console.log('onEditAsignationCommand');
    this.activateAsignationEditor(record);
},

onSaveAsignationCommand: function () {

    console.log('onSaveAsignationCommand');

    var asignationEditorView = this.getAsignationEditorView();
    var currentAsignation = asignationEditorView.getRecord();
    var newValues = asignationEditorView.getValues();

    currentAsignation.set('nombreasignacion', newValues.nombreasignacion);


    currentAsignation.set('clienteasignacion.nombrecliente', newValues.clienteasignacion);
    currentAsignation.set('tareaasignacion.nombretarea', newValues.tareaasignacion);
    currentAsignation.set('finasignacion', newValues.finasignacion); 
    currentAsignation.set('obsasignacion', newValues.obsasignacion);
    currentAsignation.set('recordatorio', newValues.recordatorio);
    currentAsignation.set('estadoasignacion', newValues.estadoasignacion);


    var asignationsStore = Ext.getStore('Asignations');

    if (null == asignationsStore.findRecord('id', currentAsignation.data.id)) {
        asignationsStore.add(currentAsignation);
    }

    asignationsStore.sync();

    asignationsStore.sort([{ property: 'dateCreated', direction: 'DESC'}]);

    this.activateAsignationsList();
},

onDeleteAsignationCommand: function () {

    console.log('onDeleteAsignationCommand');

    var asignationEditorView = this.getAsignationEditorView();
    var currentAsignation = asignationEditorView.getRecord();
    var asignationsStore = Ext.getStore('Asignations');

    asignationsStore.remove(currentAsignation);
    asignationsStore.sync();

    this.activateAsignationsList();
},

onBackToHomeCommand: function () {

    console.log('onBackToHomeCommand');
    this.activateAsignationsList();
},

launch: function () {
    this.callParent(arguments);
    var asignationsStore = Ext.getStore('Asignations');
    asignationsStore.load();
    console.log('launch');
},
init: function () {
    this.callParent(arguments);
    console.log('init');
}
});

我希望分配列表显示客户端名称( nombrecliente )和任务名称( nombretarea ),但它什么也没显示。我不知道如何引用这些值,所以列表显示了它们。我试图修改分配控制器、分配编辑器中的选择字段(表单)和分配模板,但我根本不知道这是如何工作的以及我必须做什么来显示这些值(如果它们保存在分配中此刻通过 selectfield 存储,还是我做错了什么?)

我将不胜感激任何帮助。先感谢您。PS:对不起我的英语,这不是我的母语:)

4

1 回答 1

0

请在键值对中创建数组,键名作为模型字段,然后将该数据设置到您的 asign Asignations 存储中,例如:

Asignations.setdata({fieldName:"value"});
于 2014-09-21T15:17:38.490 回答