【发布时间】:2014-04-10 12:05:41
【问题描述】:
我正在尝试为我的收藏创建第二个视图。
main.js
window.App = {
Models: {},
Collections: {},
Views: {},
Routers: {},
init: function () {
console.log('Hello from Backbone!');
var book = new this.Models.BookModel({
title: 'JS is awesome',
author: 'Douglas Crackford'
});
var book2 = new this.Models.BookModel({
title: 'JS the good parts',
author: 'Douglas Crackford'
});
var bookCollection = new this.Collections.BookCollection;
bookCollection.add([book, book2]);
var view = new this.Views.BookView();
//next line creates error
var peopleView = new this.Views.PeopleView();
}
};
$(document).ready(function () {
App.init();
});
BookView.js
App.Views = App.Views || {};
(function () {
App.Views.BookView = Backbone.View.extend({
el: $('#footer'),
template: _.template($ ('#books').html()),
initialize: function () {
console.log('BookView initialized');
},
render: function () {
this.$el.html(this.template(this.model.toJSON()));
}
});
})();
PeopleView.js
App.Views = App.Views || {};
(function () {
App.Views.PeopleView = Backbone.View.extend({
tagName: 'ul',
initialize: function() {
console.log('peopleView init')
}
});
})();
已创建输出
Hello from Backbone! main.js:8
BookView initialized BookView.js:11
Uncaught TypeError: undefined is not a function main.js:24
我觉得这个错误很奇怪。如果我将代码从 BookView 复制到 PeopleView 并且只调用这个新的 PeopleView(并编辑 BookView),我会得到同样的错误,而代码看起来是有效的,因为它执行了(参见 console.log)。 我觉得这很奇怪。我错过了什么?
编辑:
添加图片以显示执行顺序。
【问题讨论】:
-
尝试删除 App.Views = App.Views || {};它不会与 beetwen (function(){...})() 同时执行,+ 它没有用,因为您的 App.js 已经使用 App.Views = {} 进行了初始化
-
不幸的是,当我删除 App.Views = App.Views || 时没有效果{};
-
你确定所有的js文件都包含在了html中?
标签: javascript backbone.js yeoman