2012-05-12 191 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