2016-04-27 5 views
0

Ich habe zwei Formen (Raster und Formular mit Feldern).Erklären ExtJs loadRecord Methode

Meine Frage Schritt für Schritt:

  • Wenn ich Startreihe alle Datum Reihe lädt wählen Form zu bearbeiten, wobei i von loadRecord Verfahren in Controller currentDateField haben.
  • In Bearbeitungsformular Ich habe Feld mit ID 'currentDateField' mit Standardwert (new Date())
  • Wenn loadRecord Methode aufgerufen wird dieses Feld ändert seinen Wert, aber ich möchte dieses Feld immer im Standardwert von (new Date())

Also meine Fragen sind:

  1. Wie funktioniert loadRecord funktioniert und wie es ändert Felder Werte in Formular bearbeiten?
  2. Wie kann ich festlegen, dass "currentDateField" immer im Standardwert ist, auch wenn die loadRecord-Methode aktiviert ist?

Erstens:

Ext.define('MVC.view.NotesGrid', { 
extend: 'Ext.grid.Panel', 
xtype: 'notes', 

title: 'Note-list', 

store: 'Notes', 

columns: [ 
    { 
     text: 'Name', 
     dataIndex: 'name', 
     flex: 1 
    }, 
    { 
     text: 'Creation Date', 
     xtype: 'datecolumn', 
     format: 'd-m-Y', 
     dataIndex: 'createDate', 
     flex: 1 
    },{ 
     text: 'Last Modified', 
     xtype: 'datecolumn', 
     format: 'd-m-Y', 
     dataIndex: 'modifiedDate', 
     flex:1 
    }, { 
     text: 'Text', 
     dataIndex: 'noteText', 
     flex: 3 
    } 
] 
}); 

Zweitens:

GridController:

Ext.define('MVC.controller.Notes', { 
extend : 'Ext.app.Controller', 

init: function() { 
    this.control({ 
     'notes': { 
      select : this.onGridSelect 
     } 
    }); 
}, 

onGridSelect : function(grid, record, index, eOpts) { 
    // grab a reference to the Detail view... 
    // we could have used a controller "ref", but those can also be problematic 
    var detailView = Ext.ComponentQuery.query('edit')[0]; 

    //set the form record manually 
    detailView.loadRecord(record); 
} 
}); 

Modell:

Ext.define('MVC.model.Note', { 
extend : 'Ext.data.Model', 

fields : [ 
    { 
     name : 'name', 
     type : 'string' 
    }, 
    { 
     name : 'createDate', 
     type : 'date' 
    }, 
    { 
     name : 'modifiedDate', 
     type : 'date' 
    }, 
    { 
     name : 'noteText', 
     type : 'string' 
    } 
] 
}); 

Store:

Ext.define('MVC.store.Notes', { 
extend : 'Ext.data.Store', 

requires : [ 
    'MVC.model.Note' 
], 

storeId : 'Notes', 
model : 'MVC.model.Note', 

data : [ 
    { 
     'name' : 'Lisa', 
     'createDate' : '10-23-1234', 
     'modifiedDate' : '04-21-2016', 
     'noteText' : 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam posuere odio leo, at mollis libero porta ut. Etiam mauris ipsum, iaculis a imperdiet sit amet, bibendum id urna. Proin tempus lectus nisl, a tristique est tempor quis. Etiam interdum urna dolor, non gravida nulla laoreet a. Donec id velit metus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eu purus sed nisl commodo malesuada et ut velit. Quisque ut lorem magna. Nulla eget odio est. Sed ultrices turpis quam. Aliquam quis sollicitudin dolor.' 
    }, 
    { 
     'name' : 'Bart', 
     'createDate' : '10-24-1234', 
     'modifiedDate' : '04-3-2016', 
     'noteText' : 't, bibendum id urna. Proin tempus lectus nisl, non gicitudin dolor.' 
    }, 
    { 
     'name' : 'Homer', 
     'createDate' : '10-25-1234', 
     'modifiedDate' : '12-13-2416', 
     'noteText' : 'qwerty' 
    }, 
    { 
     'name' : 'Marge', 
     'createDate' : '10-26-1234', 
     'modifiedDate' : '04-21-2016', 
     'noteText' : 'qwerty123123' 
    } 
] 
}); 

Antwort

1

- Wie funktioniert loadRecord funktioniert und wie es ändert Felder Werte im Bearbeitungs Form?

Die loadRecord Methode stellt die Aufzeichnungsdaten in der Form, in der Bilanz Spiele mit den itemId Attributen oder den Namen in Ihren Formularkomponenten, wie Sie in den docs

In Ihrem Fall lesen können, Ihre Einträge Attribute Streichhölzer mit dem Namen Eigenschaft.

- Wie kann ich 'currentDateField' immer im Standardwert sein, auch wenn loadRecord Methode ivoked?

Zwei Lösungen für mich:

  1. Ändern Sie den Namen des Datefield, die name:modifiedDate hat. Nicht gut, weil ich denke, dass wenn Sie das Formular abschicken, Sie diesen spezifischen Namen senden möchten.
  2. Hören Sie sich das Änderungsereignis im Datumsfeld an, um den Wert immer auf ein neues Date() zu setzen.