2017-02-10 25 views
0

Я пытался сделать это с помощью следующих моделей шаблона:Как включить шаблон в другой шаблон в Dojo Widget?

<div> 
    <div data-dojo-attach-point="includeHere"</div> 
</div> 

и

<div> 
    ${includeHere} 
</div> 

Тогда в классе я думал, что это должно быть что-то вроде:

define([ 
    "dojo/_base/declare", 
    "dijit/_WidgetBase", 
    "dijit/_TemplatedMixin", 
    "dojo/text!./templates/myWidget.html", 
    "dojo/text!./templates/templateToBeIncluded.html" 
], function (
    declare, 
    _WidgetBase, 
    _TemplatedMixin, 
    template, 
    templateToBeIncluded 
) { 
     return declare([_WidgetBase, _TemplatedMixin], { 
      templateString: template, 

      buildRendering: function() { 
       this.includeHere = templateToBeIncluded; 
      }, 

     }); 
}); 

I cheked _TemplatedMixin source и попытался изменить функцию buildRendering в соответствии с методом _TemplatedMixin:

buildRendering: function() { 
    domConstruct.toDom(templateToBeIncluded, this.includeHere); 
}, 

Но lso не мог заставить его работать. Каков правильный способ сделать это? Я не хочу включать HTML в мой .js-файл. Я хочу, чтобы HTML был только в шаблонах.

+0

Зачем вам это нужно? Вам нужно включить виджет внутри другого виджета? Может помочь? http://stackoverflow.com/questions/9306670/adding-dojo-widget-inside-custom-widget – Radex

+1

Ну ... Я все еще начинаю в Додзё. Может быть, я не получил «Dojo way», чтобы делать что-то. Но на самом деле идея заключалась в том, что мне не нужен виджет внутри виджета ... Мне нужен только субтем. Но, с другой стороны, это почти то же самое, не так ли? ну ... как вы думаете, я должен преобразовать подшаблоны в виджеты? –

ответ

1

Я решил. Сначала, когда я просто вводил this.inherited(arguments); в методе buildRendering, он работал, но HTML не отображался. Он появляется на странице как необработанный HTML. Поэтому я попытался изменить переменную в шаблоне на $ {! IncludeHere). Как только я это сделал, HTML выглядел правильно.

Но осталась проблема, что подстановка переменных в суб-шаблона, не были оказаны, поэтому я изменил метод buildRendering к этому:

buildRendering: function() { 
    this.includeHere = string.substitute(templateToBeIncluded, this, (v) => v); 
    this.inherited(arguments); 
}, 

И все это работало нормально.

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