在sencha touch 2中,似乎只有string,int,float,boolean数据类型。那么如何存储日期时间?
更新
好的,我发现我可以使用convert()
来转换值:http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Types
convert
:Function一个从数据转换原始数据值的函数 阻止数据存储在Field中。该函数已通过 着色参数:
- v:混合
由...读取的数据值 Reader,如果未定义,将使用配置的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()
,设置参数的是什么?为什么第一个参数未被使用,何时以及它用于什么?如何获取/设置此类自定义类型(在v
中它是data
还是convert()
)?
答案 0 :(得分: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提供的值转换为将存储在Model中的对象的函数。它传递了以下参数:
v:混合
Reader读取的数据值,如果未定义,将使用配置的defaultValue。 rec:Ext.data.Model
目前由Reader读取的包含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; DR
现在实际回答你的原始问题:
Ext DOES有一个你可以使用的日期类型: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!
工作代码的小提琴:
答案 1 :(得分:3)
只是以简单的方式包装所有内容:
是的,您可以轻松地将日期存储为模型中的日期。要做到这一点,你需要:
指定模型中的字段类型(请记住在app.js的Ext.data.Types
字段中包含文件required
):
{name: 'date', type: Ext.data.Types.DATE, dateFormat: 'd.m.Y'};
在XTemplates中使用具有日期格式的修饰符:
{date:date("d.m.Y")}
在发送到服务器之前将日期字段正确转换回字符串。例如,我以格式"d.m.Y"
存储日期,因此我执行以下转换:
Ext.Date.format(form.getValues().date, 'd.m.Y').
就是这样!现在你拥有原生Date字段的所有功能,即你可以毫不费力地进行分组,排序等。
答案 2 :(得分:-3)
Sencha Touch 1.0
支持date type in Model。
但是,Sencha Touch 2
仅支持模型的仅4 数据类型。
您可以做的是,您可以将date
置于String
格式,然后将其转换为
使用API的date
对象。