2013-10-28 19 views
0

這是用於分析和結合JSON對象作爲一個屬性(有一個變換爲好,但它是非常基本的):在EmberJS模型中,有沒有更好的方法來解析並綁定到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 

它的工作原理,我理解,但有沒有更好的辦法?

回答

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') 

}); 
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') 
}); 
相關問題