2016-12-14 7 views
0

Я создаю две переменные, основанные на вызове ajax. Функция запускается при загрузке страницы, и переменные не меняются после загрузки страницы.Kendo Grid Template- Использование Javascript Variable в шаблоне

var approvalLevel; 
var fullName; 

$(function() { 
    $.ajax({ 
     type: "GET", 
     async: "false", 
     url: approvalLevelURL, 
     contentType: "application/json", 
     context: this, 
     dataType: "jsonp", 
     crossDomain: true, 
     success: function (data) { 
      getUser(data); 
     } 
    }); 
}); 

function getUser(data) { 
    approvalLevel = data.ApprovalLevel; 
    console.log(approvalLevel); 
    fullName = data.FullName; 
    console.log(fullName); 
}; 

Тогда я хотел бы использовать эти переменные в моем всплывающем шаблоне окна кендо. Всплывающее окно открывается командой «Просмотреть детали» в моей сетке кендо, а функция showDetails начинается с щелчка View Details.

var wnd, detailsTemplate; 
wnd = $("#details") 
        .kendoWindow({ 
         title: "Customer Details", 
         modal: true, 
         visible: false, 
         resizable: false, 
         width: 300 
        }).data("kendoWindow"); 

       detailsTemplate = kendo.template($("#template").html()); 
      }); 

      function showDetails(e) { 
       e.preventDefault(); 

       var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
       wnd.content(detailsTemplate(dataItem)); 
       wnd.center().open(); 
      } 

К сожалению, когда отладчик попадает в "wnd.content (DetailsTemplate (DataItem))", выдается ошибка о том, что approvalLevel не определено.

Я не уверен, что мне нужно сделать, чтобы сделать эту работу. Я попытался сделать содержимое окна URL-адресом из вызова ajax и использовал «data.ApprovalLevel». Ошибка не была выбрана, но значение все еще не определено.

Я также пробовал 'wnd.content (detailsTemplate (dataItem, approvedLevel, fullName))', который тоже не работает.

Шаблон не будет читать функции, но он правильно распознает другие поля, которые относятся к источнику данных кендо.

Это код шаблона:

<script type="text/x-kendo-template" id="detailTemplate"> 
<div id="tabs2">    
    <div id="cpTab2"> 
    # if (ChangeControlTypeApprovalLevel == 1) {# 
     <ul> 
      <li><label>Request Review:&nbsp; </label> 
       <p>No initial review required for a level one change</p> 
      </li> 
      <li class="comments"><label>Comments:&nbsp; </label> 
       <p>No initial review required for a level one change</p> 
      </li> 
     </ul> 
    #} else if (Status.toLowerCase().contains("approval")) {# 
      # if (ChangeControlTypeApprovalLevel == 2 && approvalLevel >= 2) {# 
        <ul> 
        <li><label>Request Review:&nbsp; </label> 
         <table id="horizontal-list" class="reviewStatus"> 
          <tr> 
           <td><label> Reviewed By: </label><br/> #= fullName #</td> 
           <td><label> Reviewed Date: </label><br/>#= getToday() #</td> 
           <td><label> Reviewed Status: </label><br/><input name="approved" data-bind="value:approved" class="dropDownApproval" /></td> 
          </tr> 
         </table> 
        </li> 
        <li><label>Comments:&nbsp; </label>    
         <li><textarea type="text" class="k-input k-textbox" name="Comments" data-bind="value:Comments"></textarea></li> 
         <li><button class="k-button" onclick="initialReviewTab">Submit</button></li>      
        </li> 
       </ul> 
      #} # 
    </div> 
</div> 
</script> 

Любая помощь будет принята с благодарностью. Некоторое время я застрял на этом.

ответ

0

Если у вас возникла эта проблема, я нашел решение. Поскольку мой шаблон не принимал глобальные переменные или функции, мне пришлось создавать dataItems для каждой из переменных и функции в функции showDetails.

function showDetails(e) { 
      e.preventDefault(); 
      var dataItem = this.dataItem($(e.currentTarget).closest("tr")); 
      dataItem.approvalLevel = approvalLevel; 
      dataItem.fullName = fullName; 
      dataItem.date = getToday(); 
      wnd.content(detailsTemplate(dataItem)); 
      wnd.center().open(); 
     } 

Теперь все работает красиво.