2013-07-03 27 views
12

Nakavt şablonunda bir tarihi biçimlendirmek istiyorum. Ben Nakavt Şablonda Biçimlendirme Tarihi

<td data-bind="text: FirstDate"> 

kullanıyorum bağlayıcıdır o İşte

07/04/2013 

gibi görüntülenir istiyorum tarih şu anda varsayılan biçimlendirme özellikleri Are

2013-07-04T00:00:00 

olarak iade ediliyor Knockout'un şablonunda mı?

+1

tarih biçimlendirmesi ile ilgili ya da genel olarak biçimlendirme Knockout inşa şey yok . Bunun için [moment.js] (http://momentjs.com/) gibi bir thrid party library kullanmanız gerekir. – nemesv

+0

Teşekkürler @nemesv dahil moment.js. . Tam olarak istediğim şeyi yapar. – rross

cevap

26

Knockout'ta genel biçimlendirme veya biçimlendirme ile ilgili hiçbir şey bulunmuyor. text bağlaması yalnızca özellik değerini dizeye dönüştürür, böylece özel biçimlendirmeyi istiyorsanız kendiniz yapmanız gerekir.

Tarihleri ​​ile çalışmak JavaScript'te bu kadar kolay değildir, bu nedenle bunun için moment.js gibi bir üçüncü taraf kitaplığı kullanmak muhtemelen daha iyidir. Kullanımı çok basittir ve tarihlerinizi format method ile biçimlendirebilir. Gerekli Ay sayısı, ayın günü, yıl formatı için 'L' biçiminde yerleşik olarak bulunur.

Sen görüntüleme modelinde an js kullanabilir veya doğrudan senin gibi bağlayıcı içinde:

<td data-bind="text: moment(FirstDate).format('L')"> 

Yoksa bu biçimlendirme mantığını kapsüller özel bağlama işleyicisi oluşturabilirsiniz.

Not: ko.observable, ko.observable veri bağlayıcı ifadenizde değerini almak için FirstDate özelliğinizde () özelliğini kullandığınızdan emin olun.

+0

Harika cevap :). –

+0

Ayrıca saat ve dakikaları göstermek istersek? –

+0

@lola kullanılabilir biçim seçenekleri moment.js belgelerinde listelenmiştir: http://momentjs.com/docs/#/displaying/format/ – nemesv

2

Moment.js'yi Stephen Redd's date extender'un değiştirilmiş bir sürümünde kullanıyorum. Veri bindeki bir işlevi çağırmaktan biraz daha temiz olan, buna benzer.

<input type="text" data-bind="value: dateOfBirth.formattedDate" /> 
0

Sen ayrıca bir genişletici oluşturmak için MomentJs kullanabilirsiniz:

ko.extenders.date = function (target, format) { 
    return ko.computed({ 
     read: function() { 
      var value = target(); 
      if (typeof value === "string") { 
       value = new Date(value); 
      } 

      return moment(value).format("LL"); 
     }, 
     write: target 
    }); 
} 

ViewModel:

self.YourDate = ko.observable().extend({ date: true }); 

http://momentjs.com/docs/#/displaying/format/