0

以下に、実際に機能しているログイン機能を示します。ただし、サーバーによって提供された json ファイルを JSON ストアにロードしません。

「console.log("Store before load",UserStore)」と「console.log("Store after load",UserStore)」はまったく同じメッセージを表示するので、「UserStore.load(jsonRes)」は動作していないと思います全て。「UserStore.loadData(jsonRes)」と「UserStore.loadRawData(jsonRes)」も試しましたが、どちらも機能しません(エラー: Uncaught TypeError: Object[object Object] has no method 'loadDataRaw')。その問題を解決する方法を教えてください。どうもありがとう。

Ext.util.JSONP.request({

url: 'http://127.0.0.1:4712/talentcommunity/getuserinfo',

headers: { 
    'content-type': 'application/x-www-form-urlencoded ; charset=utf-8'
},

method: 'post',

params: {
    user:data1,
    pw:data2
},

callbackName: 'myCallback',

success: function (response) {

    var loginResponse = response;
    if (loginResponse.msg == "OK") {
        var UserStore = Ext.create('Ext.data.Store', {
            model: 'Sabine.model.user',
            data: response.user
        });
        me.signInSuccess();
    }
    else{
        loginView.showSignInFailedMessage('token null.');   
    } 

},

提供される Json ファイルは次のようになります。

{msg: "OK", user: Object}

「ユーザー」自体は次のようになります。 {"token":"ee80d56688fb7d3a8bcf5939fc9cbcf1","title":"","login":"bmuster","facebookId":"","firstName":"Bertha","lastName":"Muster","nationality":"GM","birthDay":"12/09/82","phone":"+4989111111","mobile":"+4918111111","street":"Musterstra\ufffde 11","city":"Musterstadt","zipCode":"66666","willingToTravel":"","pictureUrl":"","eMail":"bmuster@example.com","publicList":[]}

My Store は次のように定義されます。

Ext.define('Sabine.store.MyJsonPStore', {
extend: 'Ext.data.Store',

requires: [
    'Sabine.model.user'
],

config: {
    autoLoad: true,
    autoSync: true,
    clearOnPageLoad: false,
    model: 'Sabine.model.user',
    storeId: 'myStore'
}
});

対応機種:

Ext.define('Sabine.model.user', {
extend: 'Ext.data.Model',

config: {
    fields: [
        {
            name: 'token',
            type: 'string'
        },
        {
            name: 'title'
        },
        {
            name: 'login'
        },
        {
            name: 'facebookId'
        },
        {
            name: 'firstName',
            type: 'string'
        },
        {
            name: 'lastName',
            type: 'string'
        },
        {
            name: 'nationality',
            type: 'string'
        },
        {
            name: 'birthDay',
            type: 'string'
        },
        {
            name: 'phone'
        },
        {
            name: 'mobile'
        },
        {
            name: 'street'
        },
        {
            name: 'city',
            type: 'string'
        },
        {
            name: 'zipCode',
            type: 'int'
        },
        {
            name: 'willingToTravel'
        },
        {
            name: 'pictureUrl'
        },
        {
            name: 'eMail'
        },
        {
            name: 'publicList'
        }
    ]
}
});

ビューの例:

Ext.define('Sabine.view.MeinAccount', {
    extend: 'Ext.Container',
    alias: 'widget.accview',
    config: {
        maxHeight: 480,
        maxWidth: 320,
    items: [{
        xtype: 'tabpanel',
        height: 430,
        maxHeight: 480,
        items: [
            {
            xtype: 'list',
            title: 'Allgemein',
            iconCls: 'home',
            modal: false,
            deferEmptyText: false,
            itemTpl: [
                '<table border = "0">',
                '<tr>',
                ' <td>Firstname</td>',
                ' <td>{firstName}</td>',
                ' <td>Last<name/td>',
                ' <td>{lastName}</td>',
                '</tr>',
                '<tr>',
                ' <td>Nationality</td>',
                ' <td>{nationality}</td>',
                '</tr>',
                '</table>'
            ],
            store: 'Sabine.store.UserStore'
     },
4

2 に答える 2

0

あなたの問題についてのいくつかの考え:

  • publicListモデルで宣言されていないフィールドがあります
  • store.load反対に、モデルのインスタンスを受け入れません。ローカル ストアにサーバーからのデータをロードします。
  • store.loadDataまたはstore.loadRawDataあなたの方法ですが、言及したメッセージ (Uncaught TypeError: Object[object Object] has no method..) は、ストアのインスタンスを正常に取得していないことを示しています。そのためには、宣言するだけでなく、まずストアをインスタンス化する必要があります。Ext.createそのためのメソッドを使用します
  • loginResponse.userすでに JSON 形式になっている場合は、使用しないでください。Ext.JSON.encode
于 2013-07-18T11:05:38.213 に答える