如何使用骨干模型从服务器获取单本书详细信息

How to get single book details from server using backbone model?

本文关键字:服务器 获取 单本书 详细信息 模型 何使用      更新时间:2023-09-26

我正在使用骨干创建简单的书库.js。功能非常简单。

1.) 获取所有书籍2.)获取特定书籍(从服务器)3.) 展示书籍

从收藏中,我可以得到所有的书。但是如何使用模型从服务器获取单本书?我需要对服务器进行 ajax 调用以获取书籍详细信息。因为细节可能很快就会更新(我不想从所有书籍收藏中获取它)

到目前为止,我创建了视图,模型,集合,如下所示

var Book: Backbone.Model.extend({
  defaults:{
    name: "",
    id: ""
  }
});

var Library: Backbone.Collection.extend({
  model: Book,
  url: function(){
     return "/books";
  },
  fetchBooks: function(){
     fetch({
         success: success_callback,
         error: error_callback
     });
  },
  fetchBook: function(bookId){
     //how to get single book ? 
  }
});

如何使用现有模型和集合从服务器获取单个项目?

如果需要在集合范围之外使用模型,则需要指定 urlRoot 属性:

var Book: Backbone.Model.extend({
  defaults: {
    name: ""
    // ** See Note on Defaults below ...
  },
  urlRoot: "/books"
});

之后,您可以使用给定的 ID 初始化模型并对其进行fetch

fetchBook: function(bookId){
  var book = new Book({ id: bookId });
  book.fetch({
      success: function() {
          console.log('Received book: ' + book.toJSON());
      }
  });
}

这将导致对"/books/{id}"的GET请求。 假设服务器返回 JSON,则所有结果都将填充为 book 实例上的属性。

** 关于默认值的注意事项:您绝对不应该将id默认值设置为空字符串,因为 Backbone 使用是否存在id来确定模型是否已保存在服务器上。 例如,如果您曾经使用model.save(...),如果id不存在,Backbone 将发出 POST,如果id确实存在,则会发出 PUT。