2013-06-11 55 views
1

我的用户有很多考试。hasMany association not found

用户:

Ext.define('Tm.model.User', { 
    extend: 'Ext.data.Model', 

    config: { 
     hasMany: { model: 'Tm.model.Exam', name: 'exams' }, 

     fields: [ 
      { name: 'id', type: 'int' }, 
      { name: 'username', type: 'string' }, 
      { name: 'email', type: 'string' }, 
      { name: 'nameFirst', type: 'string' }, 
      { name: 'nameLast', type: 'string' } 
     ], 

       ... 
    } 
}); 

考试:

Ext.define('Tm.model.Exam', { 
    extend: 'Ext.data.Model', 

    config: { 
     belongsTo: 'Tm.model.User', 

     fields: [ 
      { name: 'id', type: 'int', defaultValue: null }, 
      { name: 'title', type: 'string', defaultValue: 'Exam' } 
     ], 

       ... 
    } 
}); 

调用var exams = user.exams();给我:Uncaught TypeError: Object [object Object] has no method 'exams'

回答

4

您必须要求您的关联模型要产生的吸气剂。

所以加这的Tm.model.User定义:

requires: ['Tm.model.Exam'] 
+0

谢谢!我希望Sencha能够正确编写他们的文档或提供更好的错误报告。为什么在'belongsTo'关联中不需要? – Tjorriemorrie

+0

我发现通过测试和尝试。现在,我刚刚查看了代码,实际上您真正需要的是在代码中的任何位置(不一定在所有者模型定义中,也不在它之前)让所有模型都需要。尚未加载的模型的关联创建被推迟到它被加载(但Ext本身不会触发它)。这是防止循环依赖的一种巧妙方式,因为可以定义“不完整”模型并由其他人用来解决它们自己的关联。但是你是对的,文档可能会坚持这样一个事实,即关联模型不会自动加载。 – rixo

+0

为了总结这个冗长的评论,对于需要目标模型的'belongsTo'关联也是必需的。忘记需要父母模型是不太可能的。 – rixo