2015-03-31 32 views
2

Je travaille sur un projet Bridge.NET qui crée dynamiquement des formulaires Bootstrap basés sur des données de modèle. Les données sont reçues en tant que JSON via un appel jQuery.Ajax.Comment analyser les données JSON dans une instance d'objet dans Bridge.NET?

Le problème est, à la réception réussie je ne peux pas convertir les données JSON à leur représentation de l'objet, par exemple:

Form form = Bridge.Html5.JSON.Parse<Form>((string)data); 

formulaire est une classe qui décrit une forme d'amorçage, quelque chose comme:

public class Form 
{ 
    public string Title { get; set; } 
    public Field[] Fields { get; set; } 
} 

la ligne ci-dessus construit mais le JavaScript généré se comporte comme form n'est pas instancié, de sorte que le code échoue ci-dessous:

var title = form.Title; 

Quelqu'un at-il une idée ou une solution de contournement sur la façon de le faire fonctionner?

+0

Bonne question. Cela pourrait être l'endroit où utiliser l'attribut '[ObjectLiteral]' dans la classe 'Form'. Je vais devoir faire quelques tests pour confirmer. –

+0

J'ai mis à jour ma réponse avec un exemple de code complet qui fonctionne comme prévu avec la dernière version de Bridge.NET. –

Répondre

4

L'exemple suivant illustre le scénario complet.

Exemple

using Bridge; 
using Bridge.Html5; 

namespace Demo 
{ 
    public class App 
    { 
     [Ready] 
     public static void Main() 
     { 
      var data = "{ \"title\": \"testing\" }"; 
      Form form = JSON.Parse<Form>(data); 

      Console.Log(form.Title); // logs "testing" 
     } 
    } 

    public class Form 
    { 
     public string Title { get; set; } 
    } 
} 

Ce qui suit est émis par le compilateur:

Bridge.define('Demo.App', { 
    statics: { 
     config: { 
      init: function() { 
       Bridge.ready(this.main); 
      } 
     }, 
     main: function() { 
      var data = "{ \"title\": \"testing\" }"; 
      var form = Bridge.merge(new Demo.Form(), JSON.parse(data)); 

      console.log(form.getTitle()); // logs "testing" 
     } 
    } 
}); 

Bridge.define('Demo.Form', { 
    config: { 
     properties: { 
      Title: null 
     } 
    } 
}); 

Hope this helps.

+0

@dpant - Avec la dernière version de Bridge.NET (v1.1), votre scénario d'origine devrait fonctionner comme prévu. –

+0

Excellent, c'est le cas. Merci beaucoup. – dpant