【问题标题】:How to get single book details from server using backbone model?如何使用主干模型从服务器获取单本书详细信息?
【发布时间】:2016-02-10 00:18:45
【问题描述】:

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

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

从收藏中我可以得到所有的书。但是如何使用 Models 从服务器获取单本书?我需要对服务器进行 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 ? 
  }
});

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

【问题讨论】:

    标签: javascript model-view-controller backbone.js


    【解决方案1】:

    如果您需要在集合范围之外使用您的模型,您需要specify the urlRoot property

    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,您的所有结果都将作为图书实例的属性填充。

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

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 2011-03-24
      • 1970-01-01
      • 2018-01-19
      • 2011-12-13
      相关资源
      最近更新 更多