使用 requirejs 实例化 canjs 控制器时出错

Error in instantiating canjs controller using requirejs

本文关键字:出错 控制器 canjs requirejs 实例化 使用      更新时间:2023-09-26

我正在使用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);
         });
      }
  });
});

终于在家里.js我有了这个代码

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

但这给出了错误——

我做错了什么。

引用错误:未定义说明

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

谢谢

这不是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', {});
});

事情应该按照他们应该的方式进行。