How to represent arrays within ember-data models?

前端 未结 7 1158
不思量自难忘°
不思量自难忘° 2020-12-05 00:29

Is it necessary to use DS.hasMany pointing to a DS.Model when a model contains an array? Even if the array elements are not really models (no IDs o

7条回答
  •  情书的邮戳
    2020-12-05 01:01

    Here is an example of creating a custom array type in Ember-Data (version 10):

    DS.JSONTransforms.array =
    
      # If the outgoing json is already a valid javascript array
      # then pass it through untouched. In all other cases, replace it
      # with an empty array.  This means null or undefined values
      # automatically become empty arrays when serializing this type.
    
      serialize: (jsonData)->
        if Em.typeOf(jsonData) is 'array' then jsonData else []
    
    
      # If the incoming data is a javascript array, pass it through.
      # If it is a string, then coerce it into an array by splitting
      # it on commas and trimming whitespace on each element.
      # Otherwise pass back an empty array.  This has the effect of
      # turning all other data types (including nulls and undefined
      # values) into empty arrays.
    
      deserialize: (externalData)->
        switch Em.typeOf(externalData)
          when 'array'  then return externalData
          when 'string' then return externalData.split(',').map((item)-> jQuery.trim(item))
          else               return []
    

    Now you can use the custom type in a model attribute:

    App.CalenderWeek = DS.Model.extend
      selected_days = DS.attr('array')
    

    And now when you fetch a record with:

    App.CalendarWeek.find(1)
    

    both of these incoming json records will deserialize correctly into an Array:

    { selected_days: ['Monday', 'Tuesday', 'Saturday'] }
    

    or

    { selected_days: 'Monday, Tuesday, Saturday' }
    

提交回复
热议问题