开发者

sencha touch :: associated store/model pair not creating instance name function

i have a big problem setting up an associated store/model concept.

I have the models/store

app.models.User = Ext.regModel('app.models.User', {
    fields: [
        {name: 'id',         type: 'i开发者_Go百科nt'},
        {name: 'userID',    type: 'string'},
        {name: 'userName',  type: 'string'}
    ],

    associations: [
        {type: 'hasMany', model: 'app.models.Friend', name:'friends', associationKey:'friends'},
    ]
});

app.models.UserFriendsList = Ext.regModel('app.models.UserFriendsList', {
    fields: [
        {name: 'id',         type: 'int'},
        {name: 'userID',     type: 'string'},
        {name: 'userName',  type: 'string'}
    ],

    belongsTo: 'app.models.User',

    associations: [
        {type: 'hasMany', model: 'app.models.Friend',    name: 'friend'}
    ]
});

app.models.Friend = Ext.regModel('app.models.Friend', {
    fields: [
        {name: 'id',         type: 'int'},
        {name: 'userID',    type: 'string'},
        {name: 'userName',  type: 'string'}
    ],
   belongsTo: 'app.models.UserFriendsList',
});

app.stores.userStore = new Ext.data.Store({

    model: 'app.models.User',

    data:[
        {
            "id":                 "01", 
            "userName":         "Username"

            "friends": [
                {    "id":                 "02", 
                    "userName":         "Friend 1"
                },
                {    "id":                 "03", 
                    "userName":         "Friend 2"
                },
            ]

        }
    ]
}); 

I then use

var currentUser = app.stores.User.getAt(0); 
console.log(currentUser);
var friends = currentUser.friends().getAt(0);
console.log(friends); 

to trace some debug information about the currently loaded user.

When I use the 'associationKey'-parameter without the 'name'-parameter the trace shows that the data is fetched correctly into the data-part of the traced object 'currentUser'. But there is no function friends() to use. I only get the error

TypeError: Result of expression 'currentUser.friends' [undefined] is not a function.

When I use the 'name'-parameter without the 'associationKey'-parameter (or both parameters) the instance function friends() is created but no data is fetched into the object so I can't use it.

What is wrong with my code? Or where is my misunderstanding of concept?

THNX!!!

EDIT: please have a look into my files: http://www.box.net/shared/n4h3rdp1499ihx990v3h


Looks like you have a few problems with your model declarations and has many associations.

First, your model names should be just simple statements, not doted fully qualified objects. It makes the declarations easier.

app.models.User = Ext.regModel('app.models.User', {

Should be:

app.models.User = Ext.regModel('User', {

Second, you need to have fields that relate the ids to each other properly named.

app.models.Friend = Ext.regModel('Friend', {
fields: [
    {name: 'user_id', type: 'int'},
    .....
],

Now that your model is named User, and your Friend model references user_id, Sencha Touch will automatically use the association properly.

Third, you need to fix your Association declaration. You added the property associationKey to the association. Which doesn't exist in the docs and the model should be just 'Friend' after the first point that I mentioned.

associations: [
    {type: 'hasMany', 
     model: 'Friend', 
     name:'friends', 
    },
]

Fourth, to get the friends you need to perform a load on the store. currentUser.friends().load().getAt(0);

You can get fancy and declare different foriegn keys as different names but at this point I would just get the basic example up and working.

Sencha has a good tutorial about getting started with associations and validations.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜