Ошибка при создании экземпляра контроллера canjs с использованием requirejs

Я использую canjs и требую js для создания приложения mvc. Я новичок в них обоих.

Я создал базовый класс js --home.php и загрузил jquery, canjs и requirejs в home.php.

У меня есть две отдельные папки с именами контроллер и модель

в модели - 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: описания не определены

Если я объявлю переменную a = 5 в файле controller/home_c.js и попытаюсь предупредить значение a в файле home.js, тогда это сработает. Есть ли проблемы с кодом canjs?

Спасибо


person Abhishek Prakash    schedule 07.09.2013    source источник


Ответы (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', {});
});

Вещи должны работать так, как они должны.

person Daff    schedule 07.09.2013
comment
Спасибо :) Думаю, мне нужно больше сосредоточиться на AMD и Requirejs. - person Abhishek Prakash; 09.09.2013