Francesco Cristallo
Francesco Cristallo

Reputation: 3073

How to scroll a "JSON from Viewmodel" array to change the date format for KnockoutJS?

i'm building an MVC3 site and using Knockout / JSON for the first time, i'm new to JSON and not so good at Javascript as i would. I'm using an MVC3 model in a razor view, parsed to Json

The model in the cshtml is

@model IEnumerable<MySite.Models.UserViewModel> 

Then:

var initialData = @Html.Raw(Json.Encode(Model)); 
var viewModel = { 
                fields: ko.observableArray(initialData), 

etc.....

All works well with foreach bindings in the of a table showing the data etc.. but the problem is that in the JSON array/model there are some Date that i need to change to show them correctly.

Actually the dates are displayed like /Date(1319929111857)/

I would scroll all the array and intercept the label "BirthDate" and parse the date calling a function like this:

function formatJSONDate(jsonDate){ 
    var newDate = dateFormat(jsonDate, "mm/dd/yyyy"); 
    return newDate; 

How can i do this? i tried for hours to use a function like that below but i do not know how to call the BirthDate: label of the JSON array and change the content:

formatDate: function() { 
         for (var i=0; i<this.fields().length;i++) 
        {//foreach JSON array item,find BirthDate: /Date(sssf) and encode it correctly} 

Changing the JSON will show a correct data in the view.

After that i need to be able to edit the fields with JqueryUI Datepicker and resend all the array to the controller and save i to the DB. I'm doing it well or there are other better ways to do this?

Upvotes: 1

Views: 425

Answers (1)

drneel
drneel

Reputation: 2907

It seems like the properties in your ViewModel are DateTimes which is causing the formatting that you are seeing. Do they need to be DateTimes?

I would make the properties of the ViewModel strings and do the formatting on the server. Doing the processing on the client is an unnecessary step.

Upvotes: 1

Related Questions