docs: function (value, key, action, options, scope) {
                  if (value instanceof Model) {
                      return this._composeSubModel(value, action, options, scope);
                  } else if (value instanceof Collection) {
                      return this._composeSubCollection(value, action, options, scope);
                  } else if (value instanceof Entity) {
                      return this._composeEntity(value, action, options);
                  } else if (value instanceof List) {
                      var ret = [];
                      var self = this;
                      value.each(function (v, index) {
                          ret.push(self._getCompositionValue(v, index, action, options, scope));
                      });
                      return ret;
                  } else if (value instanceof Date) {
                      // TODO: remove dependency of moment
                      if (value) {
                          return moment(value).format(this.$dataSource.$.dateFormat);
                      } else {
                          return null;
                      }
                  } else if (value instanceof Array) {
                      var arr = [];
                      for (var i = 0; i < value.length; i++) {
                          arr.push(this._getCompositionValue(value[i], i, action, options, scope));
                      }
                      return arr;
                  } else if (value instanceof Object) {
                      return this._composeObject(value);
                  } else {
                      return value;
                  }
              }