我还在学习Ember,我想帮助解决这个问题...
我有一个简单的图书馆应用程序,包含作者和书籍。 我想添加一个"添加书"链接到我的作者视图模板 我想要这个链接来呈现一个新的书籍模板,并定义了book.author。但我希望它显示在主要插座
我的模特:
App.Author = DS.Model.extend({
name: DS.attr('string'),
about: DS.attr('string'),
picture: DS.attr('string'),
books: DS.hasMany('book', {async: true})
});
App.Book = DS.Model.extend({
title: DS.attr('string'),
isbn: DS.attr('string'),
summary: DS.attr('string'),
isAvailable: DS.attr('boolean'),
featured: DS.attr('boolean'),
picture: DS.attr('string'),
author: DS.belongsTo('author', {async: true})
});
以下是我的路线:
App.Router.map(function () {
this.resource('books', function () {
this.route('edit', {path: '/:book_id/edit'});
this.route('view', {path: '/:book_id'});
});
this.resource('authors', function () {
this.route('new');
this.route('edit', {path: '/:author_id/edit'});
this.route('view', {path: '/:author_id'}, function (){
this.resource('books', function(){
this.route('new');
});
});
});
});
网址将与authors/4/books/new
使用这种嵌套路线,我只能在books.new
插座内显示我的authors
模板。我无法在主插座上显示它。
我认为另一种方式是使用路线
App.Router.map(function () {
this.resource('books', function () {
this.route('new');
this.route('edit', {path: '/:book_id/edit'});
this.route('view', {path: '/:book_id'});
});
this.resource('authors', function () {
this.route('new');
this.route('edit', {path: '/:author_id/edit'});
this.route('view', {path: '/:author_id'});
});
});
并使用QueryParams
网址将与books/new?author_id=4
模板显示正确,但我无法将我的新书记录绑定到其作者。
"什么是最佳实践"为了让它有用吗?你能给我一个有效的例子吗?
感谢。
答案 0 :(得分:0)
您的嵌套路线方法很好,然后在您的嵌套书籍/新控制器中添加:
needs: ['authors/view'],
author: Ember.computed.alias('controllers.authors.view.model')
然后假设您的图书/新控制器上有“保存”操作:
save: function() {
var model = this.get('model');
var author = this.get('author');
model.set('author', author);
model.save().then(...);
}