0

这是用于将 json 对象解析和绑定为属性(也有一个转换,但它非常基本):

cleanCredentials: ->
  creds = @get('credentials')
  Object.keys(creds).forEach (key) =>
    unless key in @get('selectedDriver').api_keys
      delete @get('credentials')["#{key}"]

get_set: ->
  key   = arguments[0][0]
  value = arguments[0][1]
  if (arguments[0].length > 1)
    @set "credentials.#{key}", value
    @cleanCredentials()
  @get "credentials.#{key}"

getter_setter = `function(key, value) { return this.get_set(arguments); }.property('credentials')`

apiToken:          getter_setter
applicationId:     getter_setter
applicationUserId: getter_setter
companyCode:       getter_setter
username:          getter_setter

它有效,我理解,但有更好的方法吗?

4

2 回答 2

1

IIUC,您应该定义自定义转换:

App.RawTransform = DS.Transform.extend({
  deserialize: function(json) {
    return json;
  },
  serialize: function(object) {
    return object;
  }
});

App.Model = DS.Model.extend({
  rawJSONobject: DS.attr('raw')
});
于 2013-10-29T12:35:57.733 回答
0

此解决方案将无法绑定到 json 字符串中的单个项目,但会监视整个 json 字符串...此外,无法对此进行测试,但希望这会给您一些想法。

App.Person = Ember.Model.extend({

  // json string
  'jsonData' : DS.attr('string'),

  // computed property
  'parsedData' : function(key, value) {

      // setter -- take an object and save the stringified version to the model
      if (arguments.length > 1) {
          this.set('jsonData', JSON.stringify(value));
      }

      // return the parsed json string rather than the string itself...
      return $.parseJSON(this.get('jsonData'));

  }.property('jsonData')

});
于 2013-10-28T21:03:20.527 回答