Declinazione di responsabilità: Originariamente era posted nei forum di KendoUI, ma non ha ricevuto risposta.Formattazione condizionale modello Kendo
Sto cercando di utilizzare la formattazione condizionale degli elementi nel modello di ListView. Questa vista parziale utilizza un DataSource condiviso per consentire la navigazione tramite Pager, un ListView a due carte e il modello sopra menzionato. Ecco il codice del modello in questione:
<script id="contact-template" type="text/x-kendo-template">
<div id="ContactCard" class="IsActive${IsActive}">
#if (Salutation === null || Salutation === '') {#<h4>#}else{#<h4>#=Salutation# #}##=FirstName# #=LastName#</h4>
#if (Title === null || Title === '') {##}else{#<p>#=Title#</p>#}#
<br />
#if (Email == 0 || Email === '') {##}else{#<p><a href='mailto:#=LastName#,%20#=FirstName#%20<#=Email#>'>#=Email#</a></p>#}#
#if (Phone === null || Phone === '') {##}else{#<p>#=Phone##if (Extension === null || Extension === '') {#</p>#}else{# ext. #=Extension#</p>#}##}#
</div>
Ho provato diversi modi di generare questo codice, tra cui una semplice se con controlli invertiti come if (Salutation != null && Salutation != '')
ma senza alcun risultato. Penso che mi manchi qualcosa su come fare riferimento a dati di DataSource dalla sezione #if? Ho provato qualcosa come if (#=Salutation# != null && #=Salutation# != '')
ma questo ha generato un errore di modello errato.
ecco l'output:
Nota: ignorare la formattazione orribile. Questo è pre-styling.
Ecco l'intero file, per riferimento:
@model int @* accountId *@
<article id="contactArticle">
<div id="contactList"></div>
<footer><span id="pagerTotal"></span><a href="#" class="k-link" id="pageLeft" onclick="pageLeftOne()"><</a><div id="pager"></div><a href="#" class="k-link" id="pageRight" onclick="pageRightOne()">></a></footer>
</article>
<script id="contact-template" type="text/x-kendo-template">
<div id="ContactCard" class="IsActive${IsActive}">
#if (Salutation === null || Salutation === '') {#<h4>#}else{#<h4>#=Salutation# #}##=FirstName# #=LastName#</h4>
#if (Title === null || Title === '') {##}else{#<p>#=Title#</p>#}#
<br />
#if (Email == 0 || Email === '') {##}else{#<p><a href='mailto:#=LastName#,%20#=FirstName#%20<#=Email#>'>#=Email#</a></p>#}#
#if (Phone === null || Phone === '') {##}else{#<p>#=Phone##if (Extension === null || Extension === '') {#</p>#}else{# ext. #=Extension#</p>#}##}#
</div>
</script>
<script type="text/javascript">
var currentPage = 1;
var pages;
var contactDataSource;
//SNIP//
$(document).ready(function() {
var init = 1;
contactDataSource = new kendo.data.DataSource({
transport: {
read: {
url: '@Url.Action("ContactPager", "Contact")',
dataType: "json",
type: "POST",
timeout: 2000,
data: {
accountId: @Model
}
}
},
schema: {
data: "data",
total: "total",
type: "json",
model: {
fields: {
Id: { type: "string"},
FirstName: { type: "string" },
LastName: { type: "string"},
Title: { type: "string", defaultValue: ''},
Salutation: { type: "string", defaultValue: ''},
Extension: { type: "string", defaultValue: ''},
Phone: { type: "string", defaultValue: ''},
Email: { type: "string", defaultValue: ''},
IsActive: {type: "boolean"} //,
//ReceivesDistributionEmails: {type: "boolean"}
}
}
},
pageSize: 2
});
contactDataSource.read();
contactDataSource.bind("change", function(e) {
if (init) {
init = 0;
if (contactDataSource.total() < 1) {
//SNIP
} else {
$("#pager").kendoPager({
dataSource: contactDataSource,
buttonCount: 5
});
//SNIP//
pages = $("#pager").data("kendoPager").dataSource.totalPages();
$("#contactList").kendoListView({
dataSource: contactDataSource,
pageable: true,
template: kendo.template($("#contact-template").html())
});
kendo.init($("#contactList"));
}
}
});
});
</script>
TL; DR: Come faccio ad avere un modello di Kendo a costruire è il contenuto sulla base del valore dei componenti di origine dati?
Cosa c'è di sbagliato con l'output del modello? Ecco un link utile alla scrittura di espressioni modello: http://demos.kendoui.com/web/templates/expressions.html – Igorrious
Ho studiato questo howto durante la scrittura del codice, in particolare la sezione "Uso del codice JavaScript all'interno della definizione del modello". Pensavo di averlo usato bene ... Tuttavia, il mio output mostra ancora valori nulli invece di saltare quei campi. –
Sembra che la valutazione di # = Title # sia una stringa letterale 'null' per cui è necessario valutarla come valore di stringa. Dai un'occhiata alla risposta che ho appena postato. – Igorrious