Блок кода сервера в jTemplates? Возможный? - PullRequest
0 голосов
/ 10 февраля 2012

Я уже некоторое время использую jTemplates и пытаюсь создать сайт полностью с помощью jQuery + jTemplates + Web Services. Все работало очень хорошо, пока я не наткнулся на ситуацию, подобную этой, где мне нужно добавить некоторый серверный элемент управления или решить некоторые данные из кода, используя блок кода <% = DoSomething (param)%> в разгар рендеринга шаблона. ,

Рассмотрим урезанную версию jTemplates ниже:

<script type="text/html" id="ContentTemplates">
    {#template MAIN}
        {#foreach $T.Products as product}
            <div id="div-product-{$T.product.Id}" class="product-wrapper">
                {#include Content root=$T.product}
            </div>
        {#/for}
    {#/template MAIN}

    {#template Content}
        <div class="view-container">
            <p>Id: {$T.Id}</p>
            <p>Desc: {$T.Desc}</p>
            <p>Vendor Id: {$T.VendorId}</p>

            <!-- Vendor name doesn't supplied by the web service, 
                  it needs to be resolved using ASP.NET server code -->
            <p>Vendor Name: <%= GetVendorName({$T.VendorId}) %></p>
            <!-- i was hoping to do something like this, 
                  but apparently it wouldn't work this way -->
        </div>
    {#/template Content}
</script>

Теперь я бьюсь головой об стену из-за того, что не смогу достичь чего-то столь же легкого, как это ... я что-то упустил? или действительно, jTemplates нужно использовать только для рендеринга простого HTML-макета? Способен ли шаблонизатор обрабатывать блоки кода сервера? Или я просто обречен?

1 Ответ

0 голосов
/ 04 мая 2012

Вот что у меня получилось:

<p>Vendor Name: <span class="vendor-name" vid="{$T.VendorId}"></span></p>

Вместо того, чтобы пытаться выполнить серверный код в разгар процесса рендеринга (что невозможно), я отрисовываю идентификатор на заполнителе <span>, затем используйте jQuery, чтобы ввести значение позже.

// After template is rendered
$.each($(".vendor-name"), function(){
    $this = $(this);
    var vid = $this.attr("vid");
    $this.append("<%= GetVendorName(" + vid + ") %>")
});

Хаки, но, по крайней мере, это работает;)

...