2016-04-14 12 views
0

Bir jsrender şablonunda bir dizeyi değiştirmek için bir dönüştürücü kullanmaya çalışıyorum, ancak dönüştürücü bir etiket üzerinde çalışacak gibi görünmüyor . örneğin JsRender API documentation Using converters üzerine örneği kullanarak , ben: my HTML Sonrajsviews/jsrender Dönüştürücü çalışmıyor {{: ...}} tag

<script> 
    $.views.converters("upper", function(val) { 
     return val.toUpperCase(); 
    }); 
</script> 

ben konsolda şu hata mesajı atar {{upper:Name}} var: TypeError: val tanımsız ve şablon hiç bir şekilde oluşmuyor . Ancak, dönüştürücüyü {{upper:"This should be uppercase"}} gibi bir dizeye doğrudan uygularsam, dizeyi beklendiği gibi büyük harf olarak verir.

{{:Name}} etiketi, kendi başına düzgün çalışıyor, bu nedenle dönüştürücü neden çalışmıyor?

İlgili olması durumunda, bu bir ASP.NET-MVC projesidir ve şablon tarafından oluşturulan JSON verisi bir $.post('@Url.Action(..,..)')... yanıtından gelmektedir. Dönüştürücüyü etikete uygulayana kadar mükemmel çalışıyor. Dönüştürücü bu senaryoda kullanılamaz mı?

cevap

0

Name özelliğinin, bazı durumlarda tanımlanmamış gibi görünüyor.

Eğer tanımlanmamış bir adı varsa, o {{:Name}} boş bir dize, "" olarak verecek - ama undefined.toUpperCase() başarısız olur çünkü {{upper:Name}} bir hata atar.

Atılmış hataları onararak (veya dönüştürücüde bir kesme noktası veya debugger bildirimi koyarak) ve tanımlanmamış Name adresinin nereden geldiğini araştırarak araştırabilirsiniz.

Ayrıca hatayı önleyebilirsiniz atýlacaktý - ve bunun yerine hata bilgileri dışarı render olsun - aşağıdaki tekniklerden herhangi biriyle

  • yazma {{upper:Name onerror=true}} veya {{upper:Name onerror='bad'}} (https://www.jsviews.com/#onerror bakınız)
  • yazma

    $.views.converters("upper", function(val) { return val === undefined ? 'undefined' : val.toUpperCase(); });

  • Yaz $.views.settings.debugMode(true);

ve sizin tanımsız Name oluştuğunu nerede daha fazla araştırmak için, ne olsun çıkış bakın.

+0

Teşekkürler @BorisMoore Neyin yanlış olduğundan emin değilim çünkü bugün projeye başladım ve {{upper: Name onerror = true}} denedim, sonra her şey çalışmaya başladı, hatta onerror = true. Ama eminim ki hata ayıklama bilgisi bir dahaki sefere karşılaştığımda yardımcı olacaktır :) –