我正在尝试了解如何模块化Backbone ToDo tutorial
最初一切都在同一个文件中,但如果我尝试提取到另一个文件:
var TodoView = Backbone.View.extend({
...
});
然后会抛出错误:
var view = new TodoView({model: todo});
**Uncaught TypeError: undefined is not a function**
这可能是由于范围问题,但我不知道如何在$(function()
内创建引用,所以我可以在main函数中创建这个新对象。
答案 0 :(得分:2)
假设您的第一个代码部分是TodoView.js, 你的第二个代码部分是app.js。
像这样编写你的html文件,
<html>
<head>
<script type="text/javascript" src="js/TodoView.js"></script>
<script type="text/javascript" src="js/app.js"></script>
</head>
<body>
// your dom
</body>
</html>
(编辑,2015-07-27)
抱歉,我迟到了。 怎么样?<html>
<head></head>
<body>
<!-- your dom -->
<script type="text/javascript" src="js/TodoView.js"></script>
<script type="text/javascript" src="js/app.js"></script>
</body>
</html>
在很多情况下,大多数javascript代码会附加到</body>
之前,以便javascript可以使用你的dom!
答案 1 :(得分:0)
您可以使用require.js之类的东西加载外部文件并管理依赖项。
答案 2 :(得分:0)
好的,解决方法是将脚本引用移动到正文的末尾,而不是在head标记内。
我认为原因是TodoView.js
正在使用正文中定义的templates
,并且由于js文件是在正文之前加载的,因此模板尚未可用。