0

我正在使用 canjs 并需要 js 来创建 mvc 应用程序。我对他们俩都是新手。

我创建了一个基础 js 类 --home.php 并在 home.php 中加载了 jquery、canjs 和 requirejs。

我有两个单独的文件夹,分别命名为控制器和模型

在模型 - home_m.js 我有以下代码

var Description = can.Model.extend({
    findAll: 'GET ../webService/ajax/ajax_router.php?q=desc',
    create: 'POST ../webService/ajax/ajax_router.php',
    update: 'PUT ../webService/ajax/ajax_router.php/{id}',
    destroy: 'DELETE ../webService/ajax/ajax_router.php/{id}'
}, {});

在控制器中我有 home_c.js 文件。代码如下

require(['../model/home_m'], function(homeModel){

  var Descriptions = can.Control.extend({
    'init': function(element, options){
        var self = this;
        console.log(self);
         Description.findAll({}, function(des){
             console.log(des);
         });
      }
  });
});

最后在 home.js 我有这个代码

require(['../controller/home_c'], function(m, c) {
 new Descriptions('#abc', {});
});

但这给出了错误 -

我究竟做错了什么。

ReferenceError:未定义说明

如果我在 controller/home_c.js 中声明一个 var a = 5 并尝试提醒 home.js 文件中的 a 值,那么它就可以工作了。canjs代码有问题吗?

谢谢

4

1 回答 1

1

这不是 CanJS 的问题,而是 AMD(和 RequireJS 的工作原理)的更多问题。如果您像这样定义模型和控件:

// models/home_m.js
define(['can/model'], function(Model) {
    return Model.extend({
        findAll: 'GET ../webService/ajax/ajax_router.php?q=desc',
        create: 'POST ../webService/ajax/ajax_router.php',
        update: 'PUT ../webService/ajax/ajax_router.php/{id}',
        destroy: 'DELETE ../webService/ajax/ajax_router.php/{id}'
    }, {}); 
});

// controller/home_c.js
define(['can/control', '../model/home_m'], function(Control, homeModel){
  return Control.extend({
    'init': function(element, options){
        var self = this;
        console.log(self);
         Description.findAll({}, function(des){
             console.log(des);
         });
      }
  });
});

// home.js
require(['../controller/home_c'], function(Descriptions) {
 new Descriptions('#abc', {});
});

事情应该按照他们应该的方式工作。

于 2013-09-07T22:58:14.803 回答