Ruby on rails 3 Backbone.js集合url
我正在使用rails api开发一个backbone.js应用程序,该应用程序提供json,如图所示:Ruby on rails 3 Backbone.js集合url,ruby-on-rails-3,backbone.js,Ruby On Rails 3,Backbone.js,我正在使用rails api开发一个backbone.js应用程序,该应用程序提供json,如图所示: [{ "title": "Da vinci Code", "price": "50" }, { "title": "Some other name", "price": "45" }], 待办事项: 当用户访问url“www.backboneapp.com/authors/1”时,它应该显示属于作者
[{
"title": "Da vinci Code",
"price": "50"
},
{
"title": "Some other name",
"price": "45"
}],
待办事项:
def show
@author = Author.find(params[:id])
@books = @author.books
respond_to do |format|
format.json { render :json => @books }
format.html
end
end
2.Client-side-Backbone.js
路由器:
routes: {
'authors/:id': 'showauthor'
},
showauthor: function(id) {
$('#container').empty();
window.available_books = new AvailableBookList({
id: id
});
this.availablebooklistview = new AvailableBookListView({
id: id,
collection: available_books
});
$('#container').append(this.availablebooklistview.render().el);
}
可用电子书列表集合:
AvailableBookList = Backbone.Collection.extend({
model: AvailableBook,
url: "/authors/" + this.id
})
视图部分:
$(document).ready(function(){
AvailableBookListView = Backbone.View.extend({
tagName: 'section',
className: 'availablebooklist',
initialize: function() {
_.bindAll(this, 'render');
this.collection.bind('reset', this.render);
},
render: function() {
this.collection.each(function(available_book) {
var view = new AvailableBookView({
model: available_book,
});
this.$('.availablebooklist').append(view.render().el);
});
return this;
}
});
});
问题:当我访问“www.backboneapp.com/authors/1”时,我发现404错误。
在console.log中显示:
获取:www.backboneapp.com/authors/undefined
在Rails日志中:参数{id=>undefined}
*我哪里做错了*
非常感谢您提供的任何帮助和建议我假设您不是指路由器中的
新作者列表
,而是新的可用电子书列表
您的收藏中有两个问题:
AvailableBookList = Backbone.Collection.extend({
model: AvailableBook,
url: "/authors/" + this.id
})
此
指的是窗口
对象id
参数未应用于集合实例。它仅适用于视图(不适用于模型或集合)AvailableBookList = Backbone.Collection.extend({
model: AvailableBook,
url: function() {
return "/authors/" + this.id;
}
});
对于第二个,您可以定义一个initialize
函数,并在其中设置id
属性:
AvailableBookList = Backbone.Collection.extend({
initialize: function(models, options) {
this.id = options.id;
},
model: AvailableBook,
url: function() {
return "/authors/" + this.id;
}
});
为了便于阅读,我还建议将id
重命名为author\u id
:
AvailableBookList = Backbone.Collection.extend({
initialize: function(models, options) {
this.author_id = options.author_id;
},
model: AvailableBook,
url: function() {
return "/authors/" + this.author_id;
}
});
更新
您还以错误的方式初始化了集合。根据,构造函数签名是模型,选项
:
window.available_books = new AvailableBookList(null, {
id: id
});
在
initialize:function(models,options){this.id=options.id);}
中,我无法读取未定义的属性'id',即使作者id解决方案也给了我相同的错误<代码>初始化:函数(选项){this.id=options.id;},这是有效的…但是我仍然得到相同的错误,无法读取未定义的属性'id',我很高兴它有效。同样感谢您的跟进,从回答者的角度来看,他们也很受欢迎。