undefined不是canjs中的函数

时间:2015-03-02 07:07:05

标签: javascript ejs canjs

我正在尝试使用带有ejs模板引擎的html文件中的canjs从json数组中获取数据。

但是当我在浏览器上加载html文件时它会显示“未定义不是函数”的错误。

这是我的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({},函数(待办事项){为“未定义不是函数”。 有人有解决方案吗?

3 个答案:

答案 0 :(得分:2)

一些事情:

  • can.Model上的静态方法是findAll和findOne,而不是findall和findone。
  • 灯具网址应在HTTP谓词和网址之间留有空格。所以'POST / todos'应该是'POST / todos'。
  • PUT的灯具缺少匹配}。它应该是'PUT / todos / {id}'

以下是您在jsbin上工作的示例:http://jsbin.com/waqihidajo/1/edit

答案 1 :(得分:1)

方法有findAllfindOne。试试这个:

var Todo = can.Model({
    findAll : 'GET /todos',
    findOne : 'GET /todos{id}',
    create  : 'POST /todos',
    update  : 'PUT /todos/{id}',
    remove  : 'DELETE /todos/{id}'
}, {});

答案 2 :(得分:0)

我得到了同样的错误。包含can.ejs.js,错误将被解决。 从here

下载can.ejs.js