undefined 不是 canjs 中的函数

undefined is not a function in canjs

我正在尝试使用 html 文件中的 canjs 和 ejs 模板引擎从 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){ as "undefined is not a function" 行显示错误。 有人有解决方案吗?

方法是findAllfindOne。试试这个:

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

两件事:

  • can.Model 上的静态方法是 findAll 和 findOne,而不是 findall 和 findone。
  • fixture URLs 应该在 HTTP 谓词和 URL 之间有一个 space。所以 'POST/todos' 应该是 'POST /todos'.
  • PUT 的夹具缺少匹配的 }。应该是'PUT /todos/{id}'

这是您在 jsbin 上运行的示例:http://jsbin.com/waqihidajo/1/edit

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

下载 can.ejs.js