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

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 に答える