【问题标题】:In an EmberJS model, is there a better way to parse and bind to a json object as an attribute?在 EmberJS 模型中,有没有更好的方法来解析和绑定到 json 对象作为属性?
【发布时间】:2013-11-07 17:59:10
【问题描述】:

这是用于解析和绑定一个 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

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

【问题讨论】:

    标签: javascript ember.js coffeescript ember-data


    【解决方案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')
    });
    

    【讨论】:

      【解决方案2】:

      此解决方案将无法绑定到 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')
      
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多