8

在 sencha touch 2 中,似乎只有 string、int、float、boolean 数据类型。那么如何存储日期时间?

更新

好的,我发现我可以convert()用来转换值:http ://docs.sencha.com/touch/2-0/#!/api/Ext.data.Types

convert: Function 将原始数据值从数据块转换为要存储在字段中的数据的函数。该函数传递以下参数:
- v : Mixed
Reader 读取的数据值,如果未定义将使用配置的 defaultValue。
- rec : Mixed
包含 Reader 读取的行的数据对象。根据 Reader 类型,这可能是数组 (ArrayReader)、对象 (JsonReader) 或 XML 元素。

// 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'
};

但我真的不明白代码。对于convert(),什么设置参数?为什么第一个参数未使用,它何时以及用于什么用途?我如何获取/设置这样的自定义类型(它是变成v还是datain convert())?

4

3 回答 3

9

http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Types-property-DATE 哦,日期数据类型...

无论如何,在回答你的问题之前!(有关日期数据类型示例,请参见 tl;dr)

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

将 Reader 提供的值转换为将存储在模型中的对象的函数。它传递了以下参数:

v : 混合

Reader 读取的数据值,如果未定义将使用配置的 defaultValue。记录:Ext.data.Model

到目前为止,阅读器读取的包含模型的数据对象。请注意,此时模型可能未完全填充,因为字段是按照它们在字段数组中定义的顺序读取的。

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}
    ]
});

啊,此时我找到了你的例子的来源;)

// 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.
};

所有这些都或多或少地声明了一个新的数据类型。它看起来像

// 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;博士

现在要实际回答您的 -original- 问题:

Ext 有一个可以使用的日期类型:Ext.data.Types.DATE(以及其他一些)。

我假设 type: date 没有用,否则我们不会在这里!所以可能只有 4 个被正确引用。但!这确实有效:

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!

工作代码的小提琴:

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

于 2012-05-22T20:27:12.557 回答
3

只是以简单的方式包装以上所有内容:

是的,您可以轻松地将日期存储为模型中的日期。为此,您需要:

  1. 在模型中指定字段的类型(记住在 app.jsExt.data.Types的字段中包含文件):required

    {name: 'date', type: Ext.data.Types.DATE, dateFormat: 'd.m.Y'};
    
  2. 在 XTemplates 中为该字段使用具有日期格式的修饰符:

    {date:date("d.m.Y")} 
    
  3. 在发送到服务器之前将日期字段正确转换回字符串。例如,我以 format 存储日期"d.m.Y",所以我进行以下转换:

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

就是这样!现在您拥有本地日期字段的所有功能,即您可以轻松进行分组、排序等。

于 2013-02-26T20:56:50.007 回答
-3

Sencha Touch 1.0支持Model 中的日期类型

但是, ModelSencha Touch 2仅支持4种数据类型。

  • 细绳
  • 整数
  • 漂浮
  • 布尔值

您可以做的是您可以date输入String格式,然后 date使用 API 将其转换为对象。

于 2012-05-12T12:59:14.117 回答