Ember model to json

后端 未结 12 1356
北恋
北恋 2020-12-13 13:55

I am looking for an efficient way to translate my Ember object to a json string, to use it in a websocket message below

/*
 * Model
 */

App.node = Ember.Obj         


        
12条回答
  •  死守一世寂寞
    2020-12-13 14:57

    Here I take @leo, @pangratz and @kevin-pauli solution a little step further. Now it iterates not only with arrays but also through has many relationships, it doesn't check if a value has the type Array but it calls the isArray function defined in Ember's API.

    Coffeescript

    App.Jsonable = Em.Mixin.create
      getJson: ->
        jsonValue = (attr) ->
          return attr.map(jsonValue) if Em.isArray(attr)
          return attr.getJson() if App.Jsonable.detect(attr)
          attr
        base =
          if Em.isNone(@get('jsonProperties'))
            # no list given: let's use all the properties
            this
          else
            # the object has a selective list of properties to inspect
            @getProperties(@get('jsonProperties'))
        hash = {}
        for own key, value of base
          continue if value is 'toString' or Em.typeOf(value) is 'function'
          json[key] = jsonValue(value)
        json
    

    Javascript

    var hasProp = {}.hasOwnProperty;
    
    App.Jsonable = Em.Mixin.create({
      getJson: function() {
        var base, hash, hashValue, key, value;
        jsonValue = function(attr) {
          if (Em.isArray(attr)) {
            return attr.map(jsonValue);
          }
          if (App.Jsonable.detect(attr)) {
            return attr.getJson();
          }
          return attr;
        };
        base = Em.isNone(this.get('jsonProperties')) ? this : this.getProperties(this.get('jsonProperties'));
        json = {};
        for (key in base) {
          if (!hasProp.call(base, key)) continue;
          value = base[key];
          if (value === 'toString' || Em.typeOf(value) === 'function') {
            continue;
          }
          json[key] = jsonValue(value);
        }
        return json;
      }
    });
    

提交回复
热议问题