2011-11-23 19 views
6
window.User = Backbone.Model.extend({ 
    defaults: { 
    name: 'Jane', 
    friends: [] 
    },   

    urlRoot: "users", 

    initialize: function(){ 
    this.fetch(); 
    } 
}); 

    var HomeView = Backbone.View.extend({ 
    el: '#container', 
    template: _.template($("#home-template").html()), 

    render: function() { 
     $(this.el).html(this.template(this.model.toJSON())); 
     return this; 
    } 
    }); 

     home: function() { 
     var user = new User({id: 1}); 
     this.homeView = new HomeView({ 
      model: user 
     }); 
     this.homeView.render(); 
     }, 

Model verileri sorgulanıyor ve kök düzeyi özellikleri düzgün çalışıyor, ancak diğer nesneler dizisini içeren özellik görünmüyor.Backbone.js - JSON dizisini görünüm şablonuna getir

Şablon:

<script id="home-template" type="text/template"> 
     <div id="id"> 
     <div class="name"><%= name %></div> 
     <br /> 
     <h3> Single Friends</h3> 
     <br /> 
     <ul data-role="listview" data-inset="true", data-filter="true"> 
      <% _.each(friends, function(friend) { %> 
      <li> 
       <a href="/profile?id=<%= friend.id %>", data-ajax="false"> 
       <div class="picture"><img src="http://graph.facebook.com/<%= friend.fb_user_id %>/picture"></div> 
       <div class="name"><%= friend.name %></div> 
       </a> 
      </li> 
      <% }); %> 

     </ul> 
     </div> 
    </script> 

Dönüş JSON: o modelin varsayılan ([alıyor çünkü .friends hiç özniteliği görmek istemiyor gibi

{"name":"John Smith","friends":[{"id":"1234","name":"Joe Thompson","fb_user_id":"4564"},{"id":"1235","name":"Jane Doe","fb_user_id":"4564"}]} 

Neredeyse görünüyor ]).

Herhangi bir öneriniz var mı?

cevap

7

fetch(), verileri sunucudan geri göndermeden önce render() numaralı telefonu arıyorsunuz.

Bunu deneyin?

window.User = Backbone.Model.extend({ 
    defaults: { 
    name: 'Jane', 
    friends: [] 
    }, 
    urlRoot: "users" 
}); 

var HomeView = Backbone.View.extend({ 
    el: '#container', 
    template: _.template($("#home-template").html()), 

    initialize: function() { 
    this.model.fetch(); 
    this.model.bind('change', this.render, this); 
    } 

    render: function() { 
    $(this.el).html(this.template(this.model.toJSON())); 
    return this; 
    } 
}); 
İlgili konular