2013-03-02 3 views
1

Я пытаюсь отобразить HTML с помощью скомпилированных шаблонов с dust.js в браузере (не на стороне сервера с node.js). Если я скомпилирую шаблон на клиентском javascript, он отлично работает. Если я предварительно скомпилирую шаблон и включу его как тег сценария, как рекомендовано, оператор dust.loadSource приведет к отладчику Chrome, в котором говорится: «Uncaught ReferenceError: nowork не определен», где «nowork» - это имя шаблона. Так что ...Скомпилированная ссылка шаблона не определена при вызове dust.loadSource() в браузере

Этот HTML и скрипт работает:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 
    <title>This Works</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
    <script src="dust-full-0.3.0.min.js"></script> 
</head> 
<body> 
    <div id="bingo"></div> 
    <script type="text/javascript"> 
     var templateKey = 'works'; 
     var myView = {"people":[{"name":"Fred"},{"name":"Harry"},{"name":"Linda"},{"name":"Mary"}]}; 

     dust.loadSource(dust.compile("{#people}<br/>{name}{/people}", templateKey)); 
     dust.render(templateKey, myView, function(err, out) { 
      $('#bingo').html(out); 
     }); 
    </script> 
</body> 
</html> 

Но это не делает:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 
    <title>This Doesn't Work</title> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
    <script src="dust-full-0.3.0.min.js"></script> 
    <script type='text/javascript' src="nowork.js"></script> 
</head> 
<body> 
    <div id="bingo"></div> 
    <script type="text/javascript"> 
     var templateKey = 'nowork'; 
     var myView = {"people":[{"name":"Fred"},{"name":"Harry"},{"name":"Linda"},{"name":"Mary"}]}; 

     dust.loadSource(templateKey); 
     dust.render(templateKey, myView, function(err, out) { 
      $('#bingo').html(out); 
     }); 
    </script> 
</body> 
</html> 

Если включен nowork.js файл содержит:

(function() { 
    dust.register("nowork", body_0); 

    function body_0(chk, ctx) { 
     return chk.section(ctx.get("people"), ctx, { 
      "block": body_1 
     }, null); 
    } 
    function body_1(chk, ctx) { 
     return chk.write("<br/>").reference(ctx.get("name"), ctx, "h"); 
    } 
    return body_0; 
})(); 

Может ли кто-нибудь помочь?

Я просто понял, что это может быть связано с тем, что эти файлы не обслуживаются на машине с установленным node.js. Я фактически работаю локально на своей настольной машине. Это оно?

ответ

1

На самом деле вам не нужно звонить dust.loadSource, когда вы обслуживаете предварительно скомпилированные шаблоны. Внутренне, dust.loadSource просто делает eval на строке JavaScript, которая возвращается dust.compile. Если вы удалите строку dust.loadSource, ваш шаблон должен отобразиться правильно.

Node.js не является необходимым для того, что вы пытаетесь здесь. На самом деле, пыль не нужна. Вы можете использовать пылеуловитель, если все, что вы делаете, - это рендеринг на клиенте.

+0

Вы верны. Опущение обработчика loadSource. Я знал, что тебе нужно только пылевое ядро. Мое включение пылеудаления было оставлено после выполнения этапа компиляции в сценарии страницы. Спасибо! – Jim

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

  • Нет связанных вопросов^_^