1

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 (変換に関心のある 2 つのフィールド) では機能しないようです。

データは XML ファイルから読み込まれ、そのコピーはここにあります

この変換を追加するのは簡単だと思っていましたが、ここで完全に途方に暮れています。どんな助けやアイデアも大歓迎です。

4

1 に答える 1

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 コンソールに詳細情報を取得する方法があるかどうかは誰にもわかりませんか?)

于 2013-03-12T15:22:38.243 に答える