如何创建可添加到用户收藏夹的帖子列表?

时间:2014-02-16 05:14:46

标签: authentication ember.js model favorite

我对整个Ember事情都很陌生,而且我真的很想获得更多真实场景​​的示例代码。我已经看过关于身份验证的Embercast,这很有帮助,但我正在尝试创建一个应用程序,其中包含各个用户拥有的帖子列表,其他用户可以将其添加到他们的收藏夹中。

对我目前的水平而言,这是雄心勃勃的,当然,但我希望有人能够指出我的例子,甚至创造一个。我认为像这样的东西对于其他人来说是一个很好的资源 - 比Ember指南中的Todo列表示例更多,这真的不足以展示我如何创建一个真正的应用程序。我认为我们需要更多的身份验证示例。

到目前为止,这是我的模型和装置:

App.User = DS.Model.extend({
    name: DS.attr('string'),
    email: DS.attr('string'),
    posts: DS.hasMany('post'),
    favourites: DS.hasMany('favourite')
});
App.User.FIXTURES = [{
    id: 1,
    name: 'Bob Jones',
    email: 'bob@jones.com',
    favourites: [2]
}];

App.Post = DS.Model.extend({
    date_posted: DS.attr('date'),
    title: DS.attr('string'),
    description: DS.attr('description'),
    comments: DS.hasMany('comment'),
});
App.Post.FIXTURES = [{
    id: 1,
    date_posted: new Date,
    title: 'Red',
    description: 'Great colour'
    comments: []
}, {
    id: 2,
    date_posted: new Date,
    title: 'Blue',
    description: 'Makes me sad',
    comments: [1]
}];

App.Comment = DS.Model.extend({
    post: DS.belongsTo('post'),
    date_posted: DS.attr('date'),
    author: DS.attr('string'),
    message: DS.attr('string'),
});
App.Comment.FIXTURES = [{
    id: 1,
    post: [2],
    date_posted: new Date,
    author: 'Aaron',
    message: 'I agree with the description.'
}];

App.Favourite = DS.Model.extend({
    user: DS.belongsTo('user'),
    post: DS.belongsTo('post')
});
App.Favourite.FIXTURES = [{
    user: 1,
    post: 2
}];

我觉得这很容易,我甚至没有100%确信这些都是正确的。

感谢您提供任何指导!

1 个答案:

答案 0 :(得分:0)

这里有几个问题。首先你使用的是夹具,所以你应该使用FixtureAdapter。由于您在fixture数据中定义了关系,但数据只有id,因此您需要将这些关系标记为异步。此外,在您的用户夹具中,它有一个最喜欢的ID 2,但您最喜欢的灯具没有ID。

App.User = DS.Model.extend({
    name: DS.attr('string'),
    email: DS.attr('string'),
    posts: DS.hasMany('post', {async:true}),
    favourites: DS.hasMany('favourite', {async:true})
});
App.User.FIXTURES = [{
    id: 1,
    name: 'Bob Jones',
    email: 'bob@jones.com',
    favourites: [2],
    // you have no posts defined here??
}];

App.Post = DS.Model.extend({
    date_posted: DS.attr('date'),
    title: DS.attr('string'),
    description: DS.attr('description'),
    comments: DS.hasMany('comment', {async:true}),
});
App.Post.FIXTURES = [{
    id: 1,
    date_posted: new Date,
    title: 'Red',
    description: 'Great colour', // also missing this comma
    comments: []
}, {
    id: 2,
    date_posted: new Date,
    title: 'Blue',
    description: 'Makes me sad',
    comments: [1]
}];

App.Comment = DS.Model.extend({
    post: DS.belongsTo('post', {async:true}),
    date_posted: DS.attr('date'),
    author: DS.attr('string'),
    message: DS.attr('string'),
});
App.Comment.FIXTURES = [{
    id: 1,
    post: [2],
    date_posted: new Date,
    author: 'Aaron',
    message: 'I agree with the description.'
}];

App.Favourite = DS.Model.extend({
    user: DS.belongsTo('user', {async:true}),
    post: DS.belongsTo('post', {async:true})
});
App.Favourite.FIXTURES = [{
    id: 2, // it needs some sort of unique identifier
    user: 1,
    post: 2
}];

此外,您可能需要阅读Ember数据转换文档,该文档可能对您的一些问题有所帮助,https://github.com/emberjs/data/blob/master/TRANSITION.md

以下是我使用您的数据http://emberjs.jsbin.com/OxIDiVU/204/edit

制作的一个小例子