2013-08-06 2 views
0

Wordpress 및 Backbone.js를 사용하여 단일 페이지 웹 사이트를 제작하고 있습니다. 새 데이터를 가져올 때 문제가 생겼습니다. 컨테이너 요소를 대체하는 대신 DOM 요소를 컨테이너 엘에 추가하기 만하면됩니다. 컬렉션에 올바르게 업데이트됩니다. 콘솔에 올바른 요소가 있음을 알 수 있습니다.백본이 목록보기를 바꾸는 대신 추가합니다.

var PostItem = Backbone.Model.extend(); 

var PostItems = Backbone.Collection.extend({ 
    model: PostItem, 
    url: '/wp-admin/admin-ajax.php' 
}); 

var postItems = new PostItems(); 

var PostView = Backbone.View.extend({ /* Model View */ 
    tagName : 'article', 
    className : 'widget', 
    template : _.template($('#widgetPost').html()), 
    render: function(){ 
    var attributes = this.model.toJSON(); 
    this.$el.html(this.template(attributes)); 
    return this; 
    } 
}); 

var PostListView = Backbone.View.extend({ /* Collection View */ 
    el : '#content', 
    initialize: function(){ 
    this.collection.on('add', this.addOne, this); 
    this.collection.on('reset', this.addAll, this); 
    }, 
    addOne: function(postItem){ 
    var postView = new PostView({ model : postItem }); 
    this.$el.append(postView.render().el); 
    }, 
    addAll: function(){ 
    this.collection.forEach(this.addOne, this); 
    }, 
    render: function(){ 
    this.addAll(); 
    }, 
}); 

var postListView = new PostListView({ 
    collection : postItems 
}); 

$(function(){ 

    $('a#posts').click(function(){ 
    postItems.fetch({ 
     data: { 
     action: 'do_ajax', 
     fn: 'get_the_posts' 
     } 
    }); 
    return false; 
    }); 

    $('a#pages').click(function(){ 
    postItems.fetch({ 
     data: { 
     action: 'do_ajax', 
     fn: 'get_the_pages' 
     } 
    }); 
    return false; 
    }); 

}); 

답변

4

collectionView의 $ el을 지워야합니다. :)

addAll: function(){ 
    this.$el.empty(); 
    this.collection.forEach(this.addOne, this); 
} 

트릭을 할해야합니다.

+0

도움을 주셔서 감사합니다. 그러나 나는 결코 어떤 이유로 든 addAll 함수를 호출하지 않는 것으로 나타났습니다. 따라서이 솔루션으로 문제가 해결 될 수도 있지만 현재로서는 그렇지 않습니다. – benpalmer

+1

백본 1.0에서 페치는 더 이상 자동으로 '재설정'이벤트를 트리거하지 않습니다. 대신 'sync'에 바인딩하거나 가져 오기 호출에'{reset : true} '를 전달해야합니다. –

관련 문제