2012-05-12 192 views
8

在sencha touch 2中,看起来只有string,int,float,boolean数据类型。那么我如何存储日期?如何在Sencha Touch 2型号中存储日期

UPDATE

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

convert:功能的功能到原始数据值从数据 块转换成所述数据是存储在字段中。功能通过 变色参数:
-v:混合
读取器读取的数据值(如果未定义)将使用配置的defaultValue。
- rec:混合
包含由Reader读取的行的数据对象。根据 Reader类型,这可以是Array(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(),什么设置参数?为什么第一个参数未被使用以及何时使用?我如何获得/设置这种自定义类型(它是否变成vdataconvert())?

+0

我会对此进一步研究。希望在接下来的几天会有一个答案。敬请期待:) –

回答

-3

Sencha Touch 1.0支持date type in Model

但是,Sencha Touch 2仅支持 Model的数据类型。

  • 字符串
  • 整数
  • 浮动
  • 布尔

你可以做的是,你可以把你的dateString格式,再后来就用它转换成 date对象蜜蜂。

+1

所以我在Sencha以外的所有人那里?含义我不能使用Sencha/Ext的模型验证等?似乎有点奇怪,我使用Sencha模型的验证和分别进行日期验证验证了所有内容。 –

+0

没有别的选择,除非你想回到ST1 –

+0

孟捷是对的。实际上,用验证创建自定义数据类型有更好的选择。 使用字符串可能会工作,但不能编程,因为验证完全不在模型定义之内。 我会继续努力。希望在接下来的几天会有一个答案。敬请期待:) –

9

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

无论如何,回答你的问题之前! (参见TL;博士日期数据类型的例子)

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

它转换由读取器提供到将被存储在模型中的对象的值的函数。它是通过以下参数:

ν:混合

如由读取器读出,如果未定义,则取配置默认值的数据值。 rec:Ext.data。模型

包含该模型的数据对象至今由Reader读取。请注意,此时模型可能没有完全填充,因为字段是按照它们在字段数组中定义的顺序读取的。

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; DR

我们真正回答您的问题-original-:

内线确实有可以使用日期类型:Ext.data.Types .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

3

就上述所有包裹在简单的方法:

是的,你可以很容易地存储日期为日期的楷模。要做到这一点,你需要:

  1. 到模型中的指定字段的类型(请记住,包括文件Ext.data.Typesrequired场在app.js):

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

    {date:date("d.m.Y")} 
    
  3. 正确转换日期字段返回字符串发送给服务器之前。例如,我存储格式"d.m.Y"日期,所以我做了下面的转换:

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

这就是它!现在你拥有原生日期字段的所有权力,即你可以毫无麻烦地进行分组,排序等。

+0

我想我在糖匆匆的影响下写了这个。 :/ – Alex