2014-01-02 2 views
1

Я использую Дюрандаль, и я пытаюсь использовать этот модуль в качестве зависимости для другого модуля:RequireJS зависимость не определена, если я называю модуль

define('Beer', function() { 
    return function Beer (name, brewery) { 
     this.name = name; 
     this.brewery = brewery; 
    }; 
}); 

В другом модуле, я делаю это:

define(['knockout', 'models/Beer'], function (ko, Beer) { 
    return { 
     displayName: 'Add', 
     name: ko.observable(), 
     brewery: ko.observable(), 
     save: function() { 
      var beer = new Beer(this.name(), this.brewery()); 
      console.log(beer); 
     } 
    } 
}); 

Мой javascript загружен, потому что я определяю его на своих путях (и я проверил в Firebug). Но аргумент Beer в моем втором модуле не определен. Я не знаю, почему, поскольку мой модуль Beer действительно возвращает что-то (он возвращает функцию). На что еще я могу смотреть? Большинство решений, которые я нахожу, заключаются в том, что модуль (первый) ничего не возвращает, но ясно.

UPDATE Видимо, когда я удалить имя моего модуля Пиво, это работает:

define(function() { 
    return function Beer (name, brewery) { 
     // ... 
    } 
}); 

Несмотря на то, this code, казалось бы работать, это не для меня. Может ли кто-нибудь сказать мне, почему?

ответ

3

Вы смешиваете именованные модули с анонимными модулями в своем подходе.

Если имя модуля «Beer», вы требуете его, используя имя, а не путь:

require(['Beer'], function (Beer) { 
    var a = new Beer(); 
}); 

Если удалить имя из модуля Пиво, у вас есть анонимный модуль, который вы можете загрузить по пути:

require(['path/to/Beer'], function (Beer) { 
    var a = new Beer(); 
} 

Редактировать: в теме, в которую вы ссылались, не используется RequireJS, даже если она похожа.

Смежные вопросы