2

サーバーがデータを返した直後に、タイムスタンプをカスタマイズされた日付形式に変換したいと考えています。Ext.data.field で「変換」を使用しようとしました: http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Field-cfg-convert

しかし、私はそれを正しくすることはできません。これが私のモデルです。

Ext.define('AM.model.Comment',{
    extend: 'Ext.data.Model',
    fields: [
        { name: 'createdTime', type: 'date', convert:function(v,record){record.parseDate(v,record);}}, // datetime
    ],

    proxy: {
        type: 'rest',
        url:'../comments',
        writer:{
            type:'json'
        },
        reader: {
            type: 'json'
        }
    },
    parseDate:function(v,record){
        console.log(v); //show 1347465600000 
        console.log(Ext.Date.format(new Date(v), 'Y-m-d')); //show 2012-09-13
        return Ext.Date.format(new Date(v), 'Y-m-d');
    }
});

読み込み後、firebug を確認したところ、「createdTime」フィールドが「未定義」であることがわかりました。誰かが私の間違いを指摘できますか? ありがとう!

「変換」を使用せずにそれを達成できExt.Date.format(new Date(v), 'Y-m-d')ます。他のコンポーネントで使用するだけです。しかし、モデルでそれを行う方が良いと思います。その後、すべてのコンポーネントは、クエリを実行するときに常に正しい日付形式を読み取ることができます。

4

4 に答える 4

5

解決策を見つけました。「変換」を使用する代わりに、リーダーの getData() メソッドをオーバーライドします。

Ext.define('AM.model.Comment',{
    extend: 'Ext.data.Model',
    fields: [
        { name: 'createdTime', type: 'datetime'},
    ],

    proxy: {
        type: 'rest',
        url:'../comments',
        writer:{
            type:'json'
        },
        reader: {
            type: 'json',
            getData:function(data){
                for(i = 0; i < data.length; i++){
                    data[i].createdTime = Ext.Date.format(new Date(data[i].createdTime), "Y-m-d");
                }
                return data;
            }
        }
    }
});

誰かがより良い解決策を持っている場合は、教えてください。そして、なぜ「変換」がうまくいかなかったのか、今でも疑問に思っています. 誰か理由を知っているなら、私にも教えてください. ありがとう!

于 2012-09-30T06:45:20.683 に答える
2

作家を考慮した店の答えはありませんか?フォーマットされた日付として表示するには、行の renderer() を実装することで簡単に実行できますが、読み取り/書き込みではモデルの関数を実装する必要がある場合があります。PHP から JavaScript 時間への変換係数が 1000 であることを考慮すると、時間をミリ秒単位で表す間、その部分を省略できます (この例の rawValue は、整数型または日付型のいずれかになります)。

Ext.define('AM.model.Comment', {
   extend: 'Ext.data.Model',
   fields: [{
      name: 'createdTime',
      type: 'DATETIME',

      /* .convert() is triggered twice - on read and on write */
      convert: function(rawValue, model) {

        /* only convert, when rawValue appears to be an integer */
        if(parseInt(rawValue) > 0){
           return Ext.util.Format.date(new Date(parseInt(rawValue)*1000), 'Y-m-d');
        }

        /* it's a date already */
        else if(typeof(rawValue) == 'object'){
           return rawValue;
        }
      }
   }]
});
于 2014-12-20T16:42:37.480 に答える
0

モデルでマッピングを行うことができます。主な問題は、「変換」機能で「戻り」という言葉を逃したことだと思います。

うまくいかない場合は、フォーマットの前にJavaScriptの日付に変換してみてください

Ext.define('AM.model.Comment',{
extend: 'Ext.data.Model',
fields: [
    { 
        name: 'createdTime', type: '**datetime**', convert:function(v,record){
         return Ext.Date.format(new Date(v), 'Y-m-d');
        }
    },  
],

proxy: {
    type: 'rest',
    url:'../comments',
    writer:{
        type:'json'
    },
    reader: {
        type: 'json'
    }
} 

});

于 2014-03-18T07:39:03.893 に答える