2013-10-15 6 views
1

Я хочу, чтобы загрузить содержимое HTML с RequireJS вроде этого:Как загрузить HTML содержимое динамически с RequireJS

define(function (require) { 

"use strict"; 

return function (id) { 
    var url = 'text!screens/' + id + '.html'; 
    var html = require(url); 
}; }); 

Но я получаю эту ошибку: Ошибка: Имя модуля «текст экраны/home.html_unnormalized2 "еще не загружены для контекста: _

Если я пытаюсь это следующим образом:

define(function (require) { 

"use strict"; 

return function() { 
    var html = require('text!screens/home.html'); 
}; }); 

все в порядке. Но этот подход не очень приятный из-за хардкор-подсказки. Как я могу это решить?

+0

Как вы используете первый блок кода? (т. е. где это код, который имеет строку '' home ''? –

+0

Он используется как зависимость в другом модуле и там он будет называться как функция: load (id). – Dareon

ответ

6

Inline параметрический require вызовы могут выполняться асинхронно только для модулей, которые еще не загружены, как и ваш случай. Принцип (также отметить url в массиве):

var url = 'text!screens/' + id + '.html'; 
require([url], 
    function(text) { 
     // use text 
    }, 
    function(err) { // OPTIONAL BUT GOOD PRACTICE 
     // handle error 
    } 
); 

Это неудобство не beign возможность возвращать значение немедленно. Также взгляните на принцип promises (реализованный многими библиотеками, jQuery too).

+0

Ницца, он отлично работает. – Dareon

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