2012-05-12 14 views
8

In Sencha Touch 2, es scheint, gibt es nur String, Int, Float, boolesche Datentypen. Wie speichere ich dann ein Datum?Wie speichert man Daten in Sencha Touch 2 Modelle

UPDATE

OK, fand ich, dass ich convert() Werte umwandeln können: http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Types

convert: Eine Funktion Funktion Rohdatenwerte aus einer Daten Block in die Daten zu konvertieren zu sein im Feld gespeichert. Die Funktion wird übergeben die folgenden Parameter:
- v: Gemischt
Der Datenwert wie gelesen von der Reader, wenn undefined wird den konfigurierten defaultValue verwenden.
- rec: Gemischt
Das Datenobjekt, das die Zeile enthält, die vom Reader gelesen wird. Je nach Reader-Typ könnte dies ein Array (ArrayReader), ein Objekt (JsonReader) oder ein XML-Element sein.

// Add a new Field data type which stores a VELatLong object in the Record. 
Ext.data.Types.VELATLONG = { 
    convert: function(v, data) { 
     return new VELatLong(data.lat, data.long); 
    }, 
    sortType: function(v) { 
     return v.Latitude; // When sorting, order by latitude 
    }, 
    type: 'VELatLong' 
}; 

Aber ich verstehe nicht wirklich den Code. Was setzt die Parameter für convert()? Warum wird der 1. Parameter unbenutzt und wann und wofür wird er verwendet? Wie bekomme/setze ich solche benutzerdefinierten Typen (wird es v oder data in convert())?

+0

Ich werde weiter daran arbeiten. Hoffentlich wird es in den nächsten Tagen eine Antwort für Sie geben. Bleib dran :) –

Antwort

-3

Sencha Touch 1.0 unterstützt date type in Model.

Jedoch unterstützt Sencha Touch 2 nur nur 4 Datentypen für Modell.

  • String
  • Integer
  • Float
  • Boolean

Was Sie tun können, ist, können Sie Ihre date in String Format gebracht und dann später wandeln es in date Objekt mit der APIs.

+1

Also mache ich alle außerhalb von Sencha? Bedeutung Ich kann die Modelvalidierung von Sencha/Ext nicht benutzen? Es scheint ein bisschen komisch, dass ich alles validiere, indem ich die Gültigkeitsprüfung und Validierung des Sencha-Modells separat verwende? –

+0

Keine andere Wahl, außer Sie wollen zurück zu ST1 –

+0

Jiew Meng ist richtig. Tatsächlich gibt es eine bessere Wahl, um benutzerdefinierte Datentypen mit Validierungen zu erstellen. Die Verwendung von String könnte zwar funktionieren, aber nicht programmatisch, da Validierungen vollständig aus der Modelldefinition entfernt werden. Ich werde weiter daran arbeiten. Hoffentlich wird es in den nächsten Tagen eine Antwort für Sie geben. Bleib dran :) –

9

http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Types-property-DATE Oh hey ein Datum Datentyp ...

Wie auch immer, bevor Sie Ihre Frage zu beantworten! (Siehe die tl; dr für ein Datum Datentyp Beispiel)

http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Field-cfg-convert

Eine Funktion, die den Wert, der durch den Leser in ein Objekt bereitgestellt umwandelt, die in dem Modell gespeichert werden. Es wird folgende Parameter übergeben:

v: Misch

Der Datenwert, wie durch den Reader zu lesen, wenn die konfigurierte default undefined verwenden wird. Empf .: Ext.Data.Modell

Das Datenobjekt, das das Modell enthält, wie es bisher vom Reader gelesen wurde. Beachten Sie, dass das Modell zu diesem Zeitpunkt möglicherweise nicht vollständig ausgefüllt ist, da die Felder in der Reihenfolge gelesen werden, in der sie in Ihrem Felder-Array definiert sind.

Ext.define('Dude', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'locationInCity', convert: function(rawDataValue,record){ 
      return record.location+', '+record.city //would be something like Sprooklyn,Springfield 
     }}, 
     {name: 'firstname', mapping: 'name.first'}, 
     {name: 'lastname', mapping: 'name.last'}, 
     {name: 'city', defaultValue: 'homeless'}, 
     'state', 
     {name: 'location', convert: location} 
    ] 
}); 

Ah und an dieser Stelle fand ich die Quelle Ihres Beispiels;)

// Add a new Field data type which stores a VELatLong object in the Record. 
Ext.data.Types.VELATLONG = { 
    convert: function(v, data) { // convert(value,record) 
     return new VELatLong(data.lat, data.long); //VELatLong was declared previously in another library as something according to example 
    }, 
    sortType: function(v) { 
     return v.Latitude; // When sorting, order by latitude //VELatLong will have lat and long properties, this is for complex sorting 
    }, 
    type: 'VELatLong' //This is what we use to reference it. 
}; 

All dies tut, ist es, einen neuen Datentyp mehr deklarieren oder weniger. es wäre so etwas wie

// Add a new Field data type which stores a VELatLong object in the Record. 
Ext.data.Types.tehDate = { 
    convert: function(v, data) { // convert(value,record) 
     return new date(v); 
    }, 
    sortType: function(v) { 
     return v; // eh i have no idea whether its going to actually just accept date comparisons, though no there's real reason why it shouldn't 
    }, 
    type: 'tehDate' //This is what we use to reference it. 

}; 

^-- some of this is untested. 

TL aussehen; DR

Jetzt tatsächlich Ihre -original- Frage zu beantworten:

Ext DOES ein Datum Art haben Sie verwenden können: Ext.data.Types .DATE (sowie ein paar andere).

Ich nehme an Typ: Datum hat nicht funktioniert, sonst wären wir nicht hier! Also wahrscheinlich sind nur 4 richtig referenziert. Aber! dies funktioniert:

var types = Ext.data.Types; // allow shorthand type access 
Ext.define('Unit', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [ 
      { name: 'dated', type: types.DATE }, 
      { name: 'pie', type: 'string' }, 
     ] 
    } 
}); 
abc=Ext.create('Unit',{ 
    dated: new Date().toString(), 
    pie:'hello' 
}) 
console.log(abc) 
console.log(abc.get('dated').getUTCFullYear())//it liiiiives! 

Fiddle Arbeitscode:

http://www.senchafiddle.com/#w97Oe

3

einfach alle oben in einfacher Weise zu wickeln:

ja, Sie leicht Daten als Daten speichern können, in Ihrem Modelle. Um dies zu tun benötigen Sie:

  1. zu Feldtyp in einem Modell angeben (Sie erinnern Datei Ext.data.Types in required Feld in Ihrem app.js enthalten):

    {name: 'date', type: Ext.data.Types.DATE, dateFormat: 'd.m.Y'}; 
    
  2. zu verwenden Modifikatoren mit Datumsformat für die Felder in Ihrem XTemplates:

    {date:date("d.m.Y")} 
    
  3. korrekt Datumsfeld zurück zu Zeichenfolge vor dem Server zu senden konvertieren. Zum Beispiel speichere ich Daten im Format "d.m.Y", so dass ich die folgende Umwandlung:

    Ext.Date.format(form.getValues().date, 'd.m.Y'). 
    

Das ist es! Jetzt haben Sie alle Möglichkeiten des nativen Datumsfeldes, d. H. Sie können Gruppierungen, Sortierungen usw. problemlos durchführen.

+0

Ich denke, ich schrieb dies unter den Auswirkungen eines Zuckerrübens .. : / – Alex