加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – Backbone.js集合网址

发布时间:2020-12-17 01:27:49 所属栏目:百科 来源:网络整理
导读:我正在使用rails api开发一个backbone.js应用程序,它提供了如下所示的json: [{ "title": "Da vinci Code","price": "50" },{ "title": "Some other name","price": "45" }], 去做: 当用户访问网址“www.backboneapp.com/authors/1”时,它应显示属于作者的
我正在使用rails api开发一个backbone.js应用程序,它提供了如下所示的json:

[{
        "title": "Da vinci Code","price": "50"
    },{
        "title": "Some other name","price": "45"
    }],

去做:

>当用户访问网址“www.backboneapp.com/authors/1”时,它应显示属于作者的书籍列表.

进展:
? – 服务器端-Rails [authorscontroller #show]

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侧-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 Collection:

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 =>未定义}

*我哪里错了? *

任何帮助和建议都非常感谢

解决方法

我将假设您并不是指路由器中的新AuthorList,而是新的AvailableBookList.

您的收藏中有两个问题:

>在您的网址定义中,这指的是窗口对象.
>您在构造函数中传递的id参数未应用于您的集合实例.它仅适用于视图(不适用于模型或集合).

要解决第一个问题,您可以使用函数来定义集合URL,这将使您进入正确的范围:

AvailableBookList = Backbone.Collection.extend({
  model: AvailableBook,url: function() {
    return "/authors/" + this.id;
  }
});

对于第二个,您可以定义一个初始化函数并在其中设置id属性:

AvailableBookList = Backbone.Collection.extend({
  initialize: function(models,options) {
    this.id = options.id;
  },model: AvailableBook,url: function() {
    return "/authors/" + this.id;
  }
});

出于可读性目的,我还建议将id重命名为author_id:

AvailableBookList = Backbone.Collection.extend({
  initialize: function(models,options) {
    this.author_id = options.author_id;
  },url: function() {
    return "/authors/" + this.author_id;
  }
});

更新

您还以错误的方式初始化您的收藏.根据Backbone.js source,构造函数签名是模型,选项:

window.available_books = new AvailableBookList(null,{
  id: id
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读