2013-11-24 68 views
0

我有一个模型,userhashtag,属于hashtag(即one-many)。顾名思义,userhashtag型号将user型号与hashtag型号相关联。从ember.js的父资源获取属性

userhashtag模型只包含USER_IDhashtag_id。我有一个花哨模板,列出了某个user_id的所有userhashtags,并且我想要显示userhashtags和名称属性,该属性包含在其父代中的hashtag模型中。

这里是我的userhashtag型号:

App.Userhashtag = DS.Model.extend({ 
userId: DS.attr('number'), 
hashtagId: DS.attr('number'), 
createdAt: DS.attr('date'), 
updatedAt: DS.attr('date'), 
user: DS.belongsTo('user'), 
hashtag: DS.belongsTo('hashtag'), 
hashtagname: function(){ 
    var h = this.store.find('hashtag', this.get('hashtagId')); 
    return h.get('name'); 
}.property('hashtagId') 
}); 

而且我想它调用我的模板是这样的:

{{userhashtag.hashtagname}} 

我使用Chrome开发者工具余烬延伸,我可以看到它正确加载了所有的hashtagsuserhashtags。但是,我仍然看不到名称属性。经过检查,商店正确地找到相应的哈希标签,但var h正在返回,因为未定义。

有没有人有任何建议,为什么hashtagname函数没有返回名称?另外,我觉得我在最佳实践中没有这样做,应该怎么做呢?

谢谢!

+0

你会告诉我们什么json是从你的请求中下来的? – Kingpin2k

回答

1

首先,h应该是一个承诺,而不是一个记录。

其次,hashTag belongsTo工作吗?

hashtagname: function(){ 
    return this.get('hashtag.name'); 
}.property('hashtag') 

在模板中的同一时间,你可以很容易地做到

{{hashtag.name}} 

你不应该使用一个模型内的商店,我甚至不积极,你是怎么做的而无需将商店注入任何东西。 (我很喜欢你应该发布的踢腿和笑声)

+0

不,该belongsTo不起作用。根据ember chrome扩展名userhashtag.hashtag为空。我没有意识到,在模型中调用商店不是一个好主意,也许这就是为什么它不起作用(尽管它可以获得hashtag模型)。 什么是承诺? – user1287523

0

你应该从你的模型中删除hastagId和userId。当ember-data尝试解析模型并找到somemodel_idbelongsTo同名(没有_id)时,它也会加载belongsTo(或者当它需要某些属性时(如果我记得是正确的)加载它。