我正在开发一个像社交网络这样的小应用程序来管理项目。现在,我正在研究网络上的友谊关系。为此,我创建了一个名为“Person”的模型,其中包含下一个属性:
App.Person = DS.Model.extend
(
{
name: DS.attr('string'),
place: DS.attr('string'),
email: DS.attr('string'),
password: DS.attr('string'),
academic: DS.attr('string'),
professional: DS.hasMany('App.Work'),
knowledge: DS.attr('string'),
projects: DS.hasMany('App.Project'),
friends: DS.hasMany('App.Person')
}
);
现在,我正在尝试获取控制器中某个人的朋友列表,但我不知道如何访问它。尝试this.get('model').get('friends')
之类的内容会在模板中显示类似<DS.ManyArray:ember358>
的字符串。访问这个的正确方法是什么?如果它在Controller上完成,在Route上,我应该创建一个额外的View或类似的东西吗?
非常感谢您的帮助。
修改:
我已经添加了@ArturMalecki所说的确切内容,但我得到了<DS.ManyArray:ember360>
。这就是我所拥有的:
人员控制器
App.PersonController = Ember.ObjectController.extend
(
{
friends: function()
{
return this.get('model').get('friends');
}.property('model.friends'),
}
);
路由器
App.Router.map
(
function()
{
this.resource('app', { path: '/' }, function ()
{
// Additional child routes
this.route('friends');
...
});
this.resource('person');
}
);
App.PersonRoute = Ember.Route.extend
(
{
model: function()
{
return App.Person.find();
}
}
);
App.AppFriendsRoute = Ember.Route.extend
(
{
model: function()
{
return App.Person.find();
}
}
);
把手模板
<script type="text/x-handlebars" data-template-name="app/friends">
<h1>Friends</h1>
<ul>
{{#each model itemController="person"}}
<li>{{name}}, from {{place}}. Him/her friends are <{{friends}}>
{{else}}
You've no still friends
{{/each}}
</ul>
</script>
输出
友
&lt; person1 &gt;,来自&lt; place1 &gt;。他/她的朋友是&lt;
<DS.ManyArray:ember360>
&gt; &lt; person2 &gt;,来自&lt; place2 &gt;。他/她的朋友是&lt;<DS.ManyArray:ember361>
&gt; &lt; person3 &gt;,来自&lt; place3 &gt;。他/她的朋友是&lt;<DS.ManyArray:ember362>
&gt;
顺便说一下,我一直试图让某些东西起作用,它确实有效,但我确信它不是最佳解决方案,也许这也不是一个好习惯。当然不适用于所有情况:
friends: function()
{
var model = this.get('model');
var friendsList = model.get('friends').mapProperty('name');
return friendsList;
}.property('model.friends'),
答案 0 :(得分:1)
首先在路线中设置model
。假设您有PersonRoute
和PersonController
App.PersonRoute = Ember.Route.extend({
model: function() {
return App.Person.find()
}
});
然后您可以通过以下方式访问控制器中的friends
属性:
App.PersonController = Ember.ObjectController.extend({
someCustomMethod: function() {
...
this.get('model').get('friends');
...
},
})
请记住,您需要在路线中添加人员:
App.Router.map(function() {
this.resource("person");
});
如何在视图http://jsfiddle.net/Mwg89/10/
中使用hasMany
关系的简单示例
<script type="text/x-handlebars" data-template-name="application">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
{{#each friend in friends}}
{{friend.name}}
{{/each}}
<hr/>
{{#each friend in model.friends}}
{{friend.name}}
{{/each}}
</script>
App = Ember.Application.create({});
App.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});
App.Person = DS.Model.extend({
name: DS.attr('string'),
friends: DS.hasMany('App.Person'),
});
App.Person.FIXTURES = [
{ id: 1, name: 'Person1', friends: [2,3] },
{ id: 2, name: 'FriendPerson1' },
{ id: 3, name: 'FreindPerson2' }
];
App.IndexRoute = Ember.Route.extend({
model: function() {
return App.Person.find(1);
}
});
App.IndexController = Ember.ObjectController.extend({
friends: function() {
return this.get('model').get('friends');
}.property('model.friends')
})