2013-10-17 47 views
0

我有一個集合,我知道是提取整個集合,但是如何訪問從提取返回的數據?如何訪問骨幹集合的獲取結果?

/js/views/idea.js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'collections/ideas' 
], function($, _, Backbone, IdeasCollection) { 

    var IdeasView = Backbone.View.extend({ 
    el: $('#container'), 
    render: function(){ 

     this.collection = new IdeasCollection(); 

     console.log(this.collection.fetch()); // I can see data 

     var data = {}; 
     var template = _.template($('#ideasView').html(), data); 

     $('body').removeClass().addClass('blog'); 
     this.$el.html(template); 
    } 
    }); 

    return IdeasView; 
}); 

/js/collections/ideas.js(簡略爲簡潔。)

var IdeasCollection = Backbone.Collection.extend({ 
    url: '/api/ideas', 
    model: IdeaModel 
    }); 

回答

1

fetch是異步的。您必須使用事件綁定樣式。

var IdeasView = Backbone.View.extend({ 
    initialize: function() { 
     this.collection = new IdeasCollection(); 
     this.listenTo(this.collection, 'sync', this.render); 
     this.collection.fetch(); 
    }, 
    render: function(){ 
     var template = _.template($('#ideasView').html(), this.collection.toArray()); 

     $('body').removeClass().addClass('blog'); 
     this.$el.html(template); 
    } 
    }); 

    return IdeasView; 
}); 
+0

根據這個http://stackoverflow.com/a/15385066/361833,我可以添加一個回調來獲取。這不是更清潔,而不是附加一個事件處理程序?只是好奇。 – doremi

+0

您可以執行事件或成功處理程序回調。事件更適合主幹地道,有時甚至可以更正確(無論事件發生多少次都會作出響應),但是兩者都有效。主要的一點是你明白它不是同步的。 –

0

另一種方式。

var that = this; 

this.collection = new IdeasCollection(); 
this.collection.fetch({success: function(){ 
    that.render(); 
}});