我正在尝试使用带有 ejs 模板引擎的 html 文件中的 canjs 从 json 数组中获取数据。
但是当我在浏览器上加载 html 文件时,它显示错误“Undefined is not a function”。
这是我的 todo.js
var Todo = can.Model({
findall : 'GET/todos',
findone : 'GET/todos{id}',
create : 'POST/todos',
update : 'PUT/todos/{id}',
remove : 'DELETE/todos/{id}'
},{})
(function(){
var TODOS = [{id: 1,name : 'Dipesh'},
{id: 2,name : 'John'},
{id: 3,name : 'Joseph'}];
can.fixture("DELETE/todos/{id}",function(request){
return {};
});
can.fixture("PUT/todos/{id)", function(request){
$.extend(TODOS[(+request.data.id)-1], request.data);
return {};
});
can.fixture("POST/todos", function(request){
var id = TODOS.length + 1;
TODOS.push($.extend({id:id},request.data));
return {id:id, name: request.data};
});
can.fixture("GET/todos", function(request){
return TODOS;
});
can.fixture("GET/todos/{id}", function(request){
return TODOS[(+request.data.id)-1];
});
})();
Todo.findall({}, function(todos){
var frag = can.view('todosEJS', todos)
document.getElementById("todos")
.appendChild(frag);
})
这是我的 html 文件:
<html>
<head>
<title>Canjs </title>
</head>
<body>
<ul id = 'todos'></ul>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<script src='../can.custom.js' type="text/javascript"></script>
<script src='todos.js' type="text/javascript"></script>
<script id = 'todosEJS' type = 'text/ejs'>
<% for(var i = 0;i<this.length;i++){%>
<li><%=this[i].name%></li>
<% } %>
</script>
</body>
</html>
它在 Todo.findall({}, function(todos){ 行显示错误,因为“undefined is not a function”。 有人有解决方案吗?
最佳答案
一些事情:
- can.Model 的静态方法是 findAll 和 findOne,而不是 findall 和 findone。
- 夹具 URL 应该在 HTTP 动词和 URL 之间有一个空格。所以“POST/todos”应该是“POST/todos”。
- PUT 的夹具缺少匹配的 }。它应该是 'PUT/todos/{id}'
这是您在 jsbin 上工作的示例:http://jsbin.com/waqihidajo/1/edit
关于javascript - undefined 不是 canjs 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28804334/