2013-09-06 5 views
1

Я использовал Ember Data 1.0.0 beta 1. Я перешел на бета-версию 2 (только что выпущен).Ember data 1.0.0 Beta 2: нормализовать больше не работает

Похоже, что модельные сериализаторы (в которых я нормализую идентификаторы) больше не работают.

У меня сложилось впечатление, что порядок param в нормировке изменяется от типа, опоры, хэша к типу, hash, prop.

Это то, что руководство миграции рекомендует:

normalize: function (type, property, hash) { 
     // normalize the `_id` 
     var json = { id: hash._id }; 
     delete hash._id; 

     // normalize the underscored properties 
     for (var prop in hash) { 
     json[prop.camelize()] = hash[prop]; 
     } 

     // delegate to any type-specific normalizations 
     return this._super(type, property, json); 
    } 

Порядок PARAMS в бета-2 в настоящее время (типа, хэш, свойство). В результате модели, нормализованные, не содержат идентификатора в версии бета-2.

Если я переключу параметры на тип, hash, свойство, то идентификатор будет заполнен, но все остальные свойства станут в настоящий момент ампутами.

Таким образом, вы можете больше не использовать нормализацию для нормализации как id, так и любых подчеркнутых свойств.

ответ

1

В документе перехода есть усовершенствованная версия функции нормализации (которая немного более надежна).

https://github.com/emberjs/data/blob/master/TRANSITION.md#underscored-keys-_id-and-_ids

App.ApplicationSerializer = DS.RESTSerializer.extend({ 
    normalize: function(type, hash, property) { 
    var normalized = {}, normalizedProp; 

    for (var prop in hash) { 
     if (prop.substr(-3) === '_id') { 
     // belongsTo relationships 
     normalizedProp = prop.slice(0, -3); 
     } else if (prop.substr(-4) === '_ids') { 
     // hasMany relationship 
     normalizedProp = Ember.String.pluralize(prop.slice(0, -4)); 
     } else { 
     // regualarAttribute 
     normalizedProp = prop; 
     } 

     normalizedProp = Ember.String.camelize(normalizedProp); 
     normalized[normalizedProp] = hash[prop]; 
    } 

    return this._super(type, normalized, property); 
    } 
}); 

Вы получите пустой Params, если вы только изменить порядок на линии с normalize: function(.... Вы также должны включить его на линии return this._super(....

+0

Пересмотренная версия действительно работает хорошо. Поскольку мне нужно только нормализовать Id, я использовал теперь функцию normalizeId. спасибо ! – cyclomarc

Смежные вопросы