2013-03-09 64 views
1

Im正在制作Sencha Touch PhoneGap-app。 我试图在Sencha Touch 2.1中添加一个带有转换功能的模型到模型中 这个转换函数应该找到单个字母并替换它们(“convFAF”)。现场转换功能在Sencha Touch模型中失败

我不明白为什么它失败。

使用适当的功能,列出使用模型的(列出商店的)列表显示空白。 Xcode不会向控制台输出任何错误消息。

我的模型:

Ext.define('Labblistan.model.LabItem', { 
extend: 'Ext.data.Model', 
config: { 
    fields: [ 
    {name: 'Group', type: 'String'}, 
    {name: 'Groupname', type: 'String'}, 
    {name: 'Analysis', type: 'String'}, 
    {name: 'Sex', type: 'String'}, 
    {name: 'AgeFrom', type: 'String'}, 
    {name: 'AgeTo', type: 'String'}, 
    {name: 'LowLimit', type: 'String'}, 
    {name: 'UpperLimit', type: 'String'}, 
    {name: 'Unit', type: 'String'}, 
    {name: 'Comment', type: 'String'}, 
    {name: 'SortOrder', type: 'String'}, 
    { 
    name : 'formattedAnalysis', 
    type : 'string', 
    convert : function(v, record) { 
    var unformattedAnalysis = record.get('Analysis'); 
    if (unformattedAnalysis.indexOf("-") != -1) { 
    return unformattedAnalysis.substring(unformattedAnalysis.indexOf("-")).substr(1).toUpperCase(); 
    } else { 
    return unformattedAnalysis.toUpperCase(); 
    } 
    }}, 
    {name: 'formattedAgeFrom', convert: convertAgeFrom}, 
    ] 
}, 
}); 
function convertAgeFrom(v, record) { 
    var unformattedAgeFrom = record.get('AgeFrom'); 
    var formattedAgeFrom = unformattedAgeFrom.replace('d', ' d.').replace('y', ' år').replace('m', ' mån.').replace('w', ' v.'); 
    return formattedAgeFrom; 
} 

正如你可以看到我已经有一个转换功能会( “formattedAnalysis” - 这工作正常)。

我试过在字段定义里面的函数(按照formattedAnalysis),但是有相同的结果。 我也尝试将AgeFrom类型设置为Auto(以及自动和字符串formattedAgeFrom

最奇怪的部分是,如果我将record.get('AgeFrom');切换到'分析',该函数工作。也似乎与Group,Unit和SortOrder一起使用,但与AgeFrom或AgeTo(我现在感兴趣转换的两个字段)不兼容。

数据从XML文件加载,其中的副本可以找到here

我以为加入这个转换很容易,但是我在这里完全没有任何帮助或想法,深表赞同。

+1

不是确定它是否有帮助,但在模型中使用小型'string'作为类型。顺便说一句你得到的错误是什么? – ThinkFloyd 2013-03-12 11:09:59

+0

将它更改为小写不起作用。不幸的是,我在控制台中没有收到任何错误。我正在使用phonegap,因此控制台错误消息通过xcode,不知道这是否会影响控制台输出。 – Hessius 2013-03-12 14:56:14

+0

解决了它,谢谢你的小“错误是什么”,哈哈将在下面发布解决方案。 – Hessius 2013-03-12 15:16:43

回答

0

因此,显然当使用Xcode + PhoneGap + Sencha时,您不会获得与浏览器中相同的控制台输出。这让我错过了实际导致问题的原因。

Uncaught TypeError: Cannot call method 'replace' of undefined 

所以只是扔在检查该字段不为空解决它:

function convertAgeFrom(v, record) { 
var unformattedAgeFrom = record.get('AgeFrom'); 
if (unformattedAgeFrom != null) { 
var formattedAgeFrom = unformattedAgeFrom.replace('d', ' d.').replace('y', ' år').replace('m', ' mån.').replace('w', ' v.'); 
return formattedAgeFrom; 
} 
} 

感谢ThinkFloyd请求的错误消息。否则不会考虑检查。 (虽然我的项目在当前状态下无法在浏览器中运行,但我有一个较早的原型,足够接近抛出相同的错误,是否有人知道是否有办法获取更多信息到xcode控制台?)