jsrender no muestra el retorno de la función en la plantilla

Tengo dos funciones que devuelven cadenas simples. Ambos están registrados.

$.views.helpers({
    parseDate: function (jsonDate) {
        if (jsonDate != null) {
            var date = new Date(parseInt(jsonDate.substr(6)));
            var newDate = $.fullCalendar.formatDate(date, "MM/dd/yyyy");
            return newDate;
        }
    },
    renderPrimaryResource: function (PrimaryResource, LessonID) {
        debugger;
        $.ajax({
            url: "cl/lb",
            dataType: "json",
            data: { id: PrimaryResource.ResourceID },
            type: 'GET',
            async: false,
            success: function (data) {
                var thumbnailImage = data[1];
                return thumbnailImage;
            }
        });
    }

});

Mi plantilla jsrender llama a ambas funciones. Se llama a la función de fecha de análisis y se devuelve como debería. Se llama a la segunda función y devuelve algo, pero jsrender no lo recoge. No estoy seguro de lo que sucede, pero se ignora por completo.

<script id="LessonDetailTemplate" type="text/x-jsrender">
{{for lessons}}
    <div class="row lesson-block">
        <div class="span4">
            <h4>{{:LessonName}}</h4>
            <span><strong>Due on <span>{{:~parseDate(DueDate)}}</span>
            <br/>
            <p>{{:LessonDescription}}</p>
        </div>
        <div class="span4">
            <span">{{:~renderPrimaryResource(PrimaryResource, LessonID)}}</span>
        </div>
    </div>
{{/for}}

¿Alguien tiene alguna idea de por qué esto no se procesa? Lo único en lo que puedo pensar es en la llamada ajax, pero mientras se depura, la plantilla no continúa hasta que la función devuelve algo. Así que estoy perdido de lo que está pasando.

preguntado el 12 de junio de 12 a las 13:06

1 Respuestas

Respondiendo por si alguien se tropieza con esto. El problema era, de hecho, la llamada ajax. No estoy seguro de qué era exactamente, pero no puede devolver la cadena de la parte exitosa de la llamada ajax. Modificó la función de la siguiente manera y funciona bien.

renderPrimaryResource: function (PrimaryResource, LessonID) {
    debugger;
    $.ajax({
        url: "cl/lb",
        dataType: "json",
        data: { id: PrimaryResource.ResourceID },
        type: 'GET',
        async: false,
        success: function (data) {
            var thumbnailImage = data[1];
        }
    });
    if(thumbnailImage != null){
        return thumbnailImage;
    }
}

Respondido el 12 de junio de 12 a las 14:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.