2016-11-21 11 views
0

Я использую text.js для загрузки шаблонов и я получаю сообщение об ошибке намодуля еще не было загружено для контекста с использованием RequireJS текста плагин

require('text!templates/categories.html') 

ошибка

Uncaught Error: Module name "text!templates/categories.html_unnormalized2" has not been loaded yet for context: 

Have посмотрите на раздел моего просмотра в требуемом процессе загрузки шаблона, в котором возникает ошибка.

структура каталогов

проекта:

js 
    /app 
     .... 
     views/categories 
     templates/categories 
    /lib 
     /jquery 
     /underscore 
     /backbone 
     /text 
    /vendor 
     /jquery-ui 
     /fancytree 

RequireJS конфиги:

require.config({ 
    // The shim config allows us to configure dependencies for 
    // scripts that do not call define() to register a module 

    shim: { 

     underscore: { 
      exports: '_' 
     }, 
     backbone: { 
      deps: [ 
       'underscore', 
       'jquery' 
      ], 
      exports: 'Backbone' 
     }, 
     'jquery-ui': { 
      exports: "$", 
      deps: ['jquery'] 
     }, 
     'fancytree': { 
      deps: ['jquery-ui'] 
     }, 

    }, 
    paths: { 
     'jquery': '../lib/jquery/jquery', 
     'underscore': '../lib/underscore/underscore', 
     'backbone': '../lib/backbone/backbone',  
     'text': '../lib/text/text', 
     'jquery-ui': '../vendor/jquery-ui/jquery-ui', 
     'fancytree': [  
      '../vendor/fancytree/fancytree', 
      '../vendor/fancytree/fancytree.table' 
     ],  
    }, 

    baseUrl: '/js/app', 

}); 

вид:

define(['jquery-ui', 'fancytree', 'require'], function(ui, fancytree, require){ 

    'use strict'; 

    var $ = require('jquery'), 
     _ = require('underscore'), 
     Backbone = require('backbone'), 
     tpl = require('text!templates/categories.html') /* this line here produces error loading text.js*/, 
     template = _.template(tpl); 


    return Backbone.View.extend({ 
     el: $('#tree'), 
     initialize: function() { 

      this.listenTo(this.collection, 'reset add change remove', this.render, this); 
      this.collection.fetch(); 
     }, 
     initFancyTree: function() { 
      console.log('tree'); 
      $('#fancytree').fancytree(); 

     }, 
     render: function() { 

      console.log(this.collection.toJSON()) 
      this.$el.html(template()); 
      //this.initFancyTree(); 
      return this; 
     } 
    }); 
}) 
+0

Возможный дубликат [Динамическое требование в RequireJS, получение «Имя модуля еще не загружено для контекста»?] (Http://stackoverflow.com/questions/17446844/dynamic-require-in-requirejs-getting-module- name-has-not-was-loaded-yet-for-c) –

+0

Пожалуйста, найдите время, чтобы прочитать документацию и отладить код перед запросом. [Это не было 15 минут с момента возникновения проблемы] (http://stackoverflow.com/questions/40712506/error-loading-jquery-ui-in-require-js-config-for-fancytree-plugin#comment68653176_40712532) и момент, когда вы разместили вопрос. –

ответ

2

Вы пытаетесь требовать модулей с использованием синтаксиса CommonJS который RequireJS tries to emulate путем загрузки шаблона асинхронно.

Поскольку он еще не готов, когда вы пытаетесь его использовать, он выдает ошибку.

Вам потребуется только следующее, чтобы заставить его работать:

define([ 
    'jquery', 'underscore', 'backbone', 'jquery-ui', 'fancytree', 
    'text!templates/categories.html' 
], function(
    $, _, Backbone, ui, fancytree, 
    tpl 
) { 
    'use strict'; 
    return Backbone.View.extend({ 
     el: $('#tree'), 
     template: _.template(tpl), // can be put here directly 
     initialize: function() { 
      // only has 3 parameters 
      this.listenTo(this.collection, 'reset add change remove', this.render); 
      this.collection.fetch(); 
     }, 
     render: function() { 
      this.$el.html(this.template()); 
      return this; 
     } 
    }); 

}); 

Дополнительная информация (и подобные вопросы):

+0

Спасибо, это сработало, ваша помощь очень ценится - приветствия – ONYX