2013-05-23 2 views
1

Marionette CollectionView가 빈 컬렉션에서 작동하지 않는 이유는 무엇입니까?CollectionView가 빈 컬렉션으로 렌더링하지 못합니다.

CompositeView 내에서 CollectionView를 렌더링하려고합니다. 프로젝트 목록의 각 항목에있는 작업 목록입니다. CollectionView에 빈 콜렉션을 전달하기 전까지는 모든 것이 잘 작동합니다. 컬렉션 입니다. 프로젝트에 쉽게 할당 된 작업이 없을 수 있습니다.

크롬에 의해 표시되는 오류가 전달 프로젝트의 컬렉션 TasksCollection의 필터 메소드에 의해 반환 된 작업 목록이 있습니다로는, 어떤 이유를 내가 할 수있는 Backbone.Collection이다 유효한

Uncaught TypeError: Object [object Object] has no method 'on'

입니다 위의 오류가 표시된 이유를 찾지 못했습니다.

Marionette의 CollectionView는 빈 컬렉션 (emptyView 속성을 가짐)을 받아 들일 수 있습니다. 따라서 전달되는 경우 오류가 발생하는 이유는 무엇입니까? 나는 "그냥 작동해야"하는 컬렉션에 이벤트를 묶으려고한다고 가정합니다 - 그것은 결석 한 모델 일뿐입니다.

내 작업 모음은 다음과 같습니다

var TasksCollection = Backbone.Collection.extend({ 
    model: TaskModel, 
    byProject: function(projectId) { 
     var matches = this.filter(function(task) { 
      return task.get('projectId') == projectId; 
     }, this); 

     return new TasksCollection (matches); 
    }, 
    complete: function(state) { 
     return new TasksCollection (this.where({ complete: state })); 
    } 
}); 

내보기

는 다음과 같이 :

// Single task item 
var TasksListView = Marionette.CollectionView.extend({ 
    tagName: 'ul', 
    className: 'tasks nav nav-stacked nav-pills', 
    itemView: Minuteboy.views.TaskItem, 
    emptyView: Templates['partials/tasks-empty'] 
}); 

// Project item (should probably be a Layout or CompositeView) 
var DashboardProject = Marionette.ItemView.extend({ 
    tagName: 'article', 
    template: Templates['partials/dashboard-project'], 
    initialize: function() { 
     this.on('render', function() { 
      var tasks = AllProjectTasks.byProject(this.model.get('id')).complete(false); 

      this.$el.find('.tasks-wrapper').html(new TasksListView({ 
       collection: tasks 
      }).render().el); 
     }); 
    } 
}); 

// Containing view with page title and container for projects list 
var DashboardPage = Marionette.CompositeView.extend({ 
    template: Templates['pages/dashboard'], 
    itemView: DashboardProject, 
    itemViewContainer: '#content' 
}); 

마지막으로, 나는이 같은 페이지보기를 인스턴스화 :이

var page = new DashboardPage({ 
    collection: // A valid Backbone.Collection 
}); 

답변

2

했다 내 잘못이야. 내 CollectionView의 emptyView 속성에 대한 일종의 뷰 객체를 사용하는 대신 템플릿 (이 경우에는 핸들) 만 사용했습니다. 내 작업 CollectionView는 다음과 같습니다

var EmptyList = Marionette.ItemView.extend({ 
    tagName: 'li', 
    template: Templates['partials/tasks-empty'] 
}); 

Minuteboy.views.TaskList = Marionette.CollectionView.extend({ 
    tagName: 'ul', 
    className: 'tasks nav nav-stacked nav-pills', 
    itemView: Minuteboy.views.TaskItem, 
    emptyView: EmptyList 
}); 

참고 itemView 라인 :

itemView: Minuteboy.views.TaskItem 

나쁜입니다

itemView: Templates['partials/tasks-empty'] 

로 사용됩니다.

관련 문제