I don't know if it's a typographical error but if not, your problem is that you are setting your collection in your Task view and not in your Tasks view.
var tasksView = new App.Views.Tasks({collection : tasksCollection});
题
I am running this sample program in backbone. But I am getting a error like 'Cannot call method 'get' of undefined'. I tried everything with what i know so far. But I still have the problem. Can anyone help me to solve this issue.
(function(){
//Providing a global scope
window.App = {
Models : {},
Views: {},
Collections: {}
};
window.template = function(id){
return _.template($('#'+id).html());
};
// Declared a Model for Task
App.Models.Task = Backbone.Model.extend({
});
App.Collections.Tasks = Backbone.Collection.extend({
model: App.Models.Task
});
App.Views.Tasks = Backbone.View.extend({
tagName: 'ul',
render: function(){
this.collection.each(this.addOne,this);
},
addOne: function(task){
//creating a child view
var taskView = new App.Views.Task({model: task});
//append it to root element
this.$el.append(taskView.render().el);
}
});
App.Views.Task = Backbone.View.extend({
tagName: 'li',
render : function(){
this.$el.html(this.model.get('title'));
return this;
}
});
var tasksCollection = new App.Collections.Tasks([
{
title: 'Goto Store',
priority: 4
},
{
title: 'Goto Store2',
priority: 5
},
{
title: 'Goto Store3',
priority: 6
},
{
title: 'Goto Store4',
priority: 7
}
]);
var tasksView = new App.Views.Task({collection : tasksCollection});
tasksView.render();
console.log(tasksView.el);
// $(document.body).append(tasksView.el);
})();
解决方案
I don't know if it's a typographical error but if not, your problem is that you are setting your collection in your Task view and not in your Tasks view.
var tasksView = new App.Views.Tasks({collection : tasksCollection});