How do I fetch a single model in Backbone?

前端 未结 7 1093
误落风尘
误落风尘 2020-11-30 18:36

I have a Clock model in Backbone:

var Clock = Backbone.Model.extend({});

I\'m trying to get an instance of that that has the l

相关标签:
7条回答
  • 2020-11-30 18:57

    I want to use RESTful url,but I couldn't understand why 'postId' can't be added to base url.

    var PostModel = Backbone.Model.extend({
        urlRoot: 'getBlogPost',
        defaults: {
            postTitle: "defaultTitle",
            postTime: "1970-01-01",
            postContent: "defaultContent",
            postAuthor: "anonymous"
        }
    });
    
    var post = new PostModel({
                postId: 1
            });
    alert(post.url());
    

    Then I know only after I set 'idAttribute' as 'postId' in Model can I get the right url. like this:

    var PostModel = Backbone.Model.extend({
        idAttribute: 'postId',
        urlRoot: 'getBlogPost',
        defaults: {
            postTitle: "defaultTitle",
            postTime: "1970-01-01",
            postContent: "defaultContent",
            postAuthor: "anonymous"
        }
    });
    
    0 讨论(0)
  • 2020-11-30 19:07
    var Person = Backbone.Model.extend({urlRoot : '/person/details'});
    var myName = new Person({id: "12345"});
    myName.fetch();
    

    As a result you make a Ajax request on the

    URL http://[domainName]/person/details/id 
    

    and you have the JSON response back.

    Enjoiiii !!!

    0 讨论(0)
  • 2020-11-30 19:08

    Your second approach is the approach I have used. Try adding the following to your Clock model:

    url : function() {
      var base = 'clocks';
      if (this.isNew()) return base;
      return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
    },
    

    This approach assumes that you have implemented controllers with the hashbang in your URL like so, http://www.mydomain.com/#clocks/123 , but it should work even if you haven't yet.

    0 讨论(0)
  • 2020-11-30 19:08

    Try specifying urlRoot in the model:

    From the docs:

    var Book = Backbone.Model.extend({urlRoot : '/books'});
    var solaris = new Book({id: "1083-lem-solaris"});
    solaris.fetch();
    
    0 讨论(0)
  • 2020-11-30 19:11

    I personally recommend, following the Model#url method documentation

    model = new Model(id: 1)
    view = new View(model: model) 
    collection = new Collection([model])
    model.fetch()
    

    in your collection remember to add the collection url:

    url: "/models"
    

    and in your View's initialize function do:

    this.model.bind("change", this.render)
    

    this way backbone will do an ajax request using this url:

    "/models/1"
    

    your model will be updated and the view rendered, without modifying Collection#url or Model#urlRoot

    note: sorry this example came out in coffee script, but you can easily translate it to js adding var statements

    0 讨论(0)
  • 2020-11-30 19:14

    You probably should be accessing the object trough a collection and keeping it in the collection all the time. This is how to do it:

    var AllClocks = Backbone.Collection.extend({
      model: Clock,
      url: '/clocks/'
    });
    
    var allClocks = new AllClocks();
    my_clock = allClocks.add({id: 123});
    my_clock.fetch()
    
    0 讨论(0)
提交回复
热议问题