Rappresentazione di oggetti serializzati in Javascript da PHP

0

Diciamo che ho un oggetto Widget che serializzo e rimando al browser a intervalli regolari. Questo oggetto Widget include molti membri (variabili) e altri oggetti insieme ai loro membri. Ad esempio, in PHP, il mio widget potrebbe assomigliare a questo:

class Widget implements \JsonSerializable{
  private $_variable_1 = null;
  private $_variable_2 = null;
  private $_object_widget_child = null; //This is an array of widget children
}

Per brevità, l'oggetto Widget_child può avere molti membri (variabili) e oggetti.

Trovo ingombrante lavorare con oggetti serializzati in javascript quando sono implementati in questo modo in PHP perché finisco per dover scrivere codice javascript per scorrere ogni array di oggetti serializzati. Esempio in javascript:

...
success: function(data){
  var variable_1 = data.widget._variable_1;
  var variable_2 = data.widget._variable_2;

  var num_widget_children = data.widget._object_widget_child.length;
  if(num_widget_children > 0){
    for(var i = 0; i < num_widget_children; i++){
      //Do something like access widget childs name
    }
}

Penso che potresti vedere come questo potrebbe diventare molto complicato se i bambini del widget avessero anche matrici di oggetti come membri della sua classe e io avevo bisogno di accedere ad alcuni livelli di proprietà a 5 livelli.

Questo metodo di progettazione è il problema o esiste un modo più semplice per lavorare con oggetti serializzati da PHP in javascript che devo ricercare?

    
posta larrylampco 23.04.2018 - 05:10
fonte

1 risposta

1

Se devi elaborare array annidati con struttura nota, devi creare un metodo che elabori tutti i livelli usando la recurency:

function myHelper(widget) {
    var result = {
        variable_1: widget._variable_1,
        variable_2: widget._variable_2,
        children: [],
    };

    var num_widget_children = widget._object_widget_child.length;
    if (num_widget_children > 0){
        for (var i = 0; i < num_widget_children; i++){
            result.children.push(myHelper(widget._object_widget_child[i]));
        }
    }

    return result;
}
    
risposta data 25.04.2018 - 21:19
fonte

Leggi altre domande sui tag