【问题标题】:Field conversion function fails in Sencha Touch ModelSencha Touch 模型中的字段转换功能失败
【发布时间】:2013-03-09 13:26:54
【问题描述】:

我正在制作 Sencha Touch PhoneGap 应用。 我正在尝试将具有转换功能的字段添加到 Sencha Touch 2.1 中的模型 这个转换函数应该找到单个字母并替换它们(“convFAF”)。

我不明白为什么会失败。

使用该功能后,使用该模型的列表(列出的商店)显示为空白。 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 的 auto 和 string

最奇怪的是,如果我切换 record.get('AgeFrom');到“分析”,该功能有效。它似乎也适用于 Group、Unit 和 SortOrder,但不适用于 AgeFrom 或 AgeTo(我现在有兴趣转换的两个字段)。

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

我认为添加这种转换会很容易,但我在这里完全不知所措。非常感谢任何帮助或想法。

【问题讨论】:

  • 不确定是否有帮助,但使用小写字母 string 作为模型类型。顺便说一句,您遇到了什么错误?
  • 将其更改为小写没有帮助。不幸的是,我在控制台中没有收到任何错误。我正在使用phonegap,所以控制台错误消息通过xcode,不确定这是否会影响控制台输出。
  • 解决了,感谢您的小“什么是错误”哈哈将在下面发布解决方案。

标签: javascript cordova extjs sencha-touch sencha-touch-2


【解决方案1】:

因此,显然在使用 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 控制台?)

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 2011-10-15
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2014-05-25
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多