1

サーバーから次の JSON を取得します。

{
    "contextPath":"http://apps.dhis2.org/demo",
    "user":{
        "id":"GOLswS44mh8",
        "name":"System Administrator",
        "isAdmin":true,
        "ou":{
             "id":"ImspTQPwCqd",
             "name":"Sierra Leone"
        }
     }
}

この JSON をUserモデルとOrganizationUnitモデルの 2 つのモデルに変換する必要があります。

このチュートリアルhttp://docs.sencha.com/touch/2.2.1/#!/api/Ext.data.reader.Readerを読んだので、私のコード:

ユーザーモデル:

Ext.define('mobile-visualizer.model.User', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            {name: 'id',  type: 'string'},
            {name: 'name',   type: 'string'},
            {name: 'isAdmin', type: 'boolean'}
        ],
        hasOne: {
            model: "mobile-visualizer.model.OrganizationUnit",
            name: "ou"
        },
        proxy: {
            type: 'ajax',
            url : 'http://apps.dhis2.org/demo/dhis-web-visualizer/initialize.action',
            method : 'GET',
            withCredentials : true,
            useDefaultXhrHeader : false,
            reader: {
                type: 'json',
                rootProperty: 'user'
            }
        }
    }
});

組織単位モデル:

Ext.define('mobile-visualizer.model.OrganizationUnit', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            {name: 'id',  type: 'string'},
            {name: 'name',   type: 'string'}
        ],
        belongsTo: 'mobile-visualizer.model.User'
    }
});

ストア:

Ext.define('mobile-visualizer.store.UsersStore', {
    extend : 'Ext.data.Store',
    model : "mobile-visualizer.model.User",
    autoLoad : false,
    storeId : "usersStore",

    proxy : {
        type : 'ajax',
        url : 'http://apps.dhis2.org/demo/dhis-web-visualizer/initialize.action',
        method : 'GET',
        withCredentials : true,
        useDefaultXhrHeader : false,
        reader : {
            type : 'json',
            rootProperty : 'user'
        }
    }
});

したがって、別のコードを使用してストアからユーザーを取得しようとすると:

        var store = Ext.create('mobile-visualizer.store.UsersStore');
        store.load({
                    callback : function() {
                        // the user that was loaded
                        var user = store.first();
                        console.log(user.ou())
                    }
                });

エラーがあります: Uncaught TypeError: Object [object Object] has no method 'ou'

user に関するすべての情報を取得できますが、 userからouを取得できません。関連付けの問題のようです。

しかし、私は公式のチュートリアルのようにすべてを作ります。この問題の解決にご協力ください。ありがとう。

4

1 に答える 1