2016-04-18 3 views
2

У меня есть две модели, которые выглядят следующим образом:Ember модель отношения не соответствуют API

// models/database.js 
export default DS.Model.extend({ 
    title: DS.attr(), 
    /*...*/ 
    documents: DS.hasMany('document') 
}); 

// models/document.js 
export default DS.model.extend({ 
    name: DS.attr(), 
    /*...*/ 
    database: DS.belongsTo('database') 
}); 

Есть также некоторые маршруты

Router.map(function() { 
    this.route('databases', function() { 
    this.route('database', { path: ":database_id" }, function() { 
     this.route('documents'); 
    }); 
    }); 
}); 

Когда я звоню /базы данных/[ID]/документы если ничего не получил.

Я думаю, проблема в том, что я работаю с API JSON HAL, и когда я прошу базы данных по API, я получаю такой ответ.

{ 
"_embedded": { 
    "databases": [ 
     { 
      "_links": { 
       "self": { 
        "href": "<API_URL>/databases/7ec39267b544424c/", 
        "reference": "7ec39267b544424c", 
        "title": "00000006" 
       } 
      }, 
      "database": { 
       "name": "00000006", 
       "reference": "7ec39267b544424c", 
       "title": "****" 
      } 
     }, 
     { 
      "_links": { 
       "self": { 
        "href": "<API_URL>/databases/aace19af004144a4/", 
        "reference": "aace19af004144a4", 
        "title": "00000007" 
       } 
      }, 
      "database": { 
       "name": "00000007", 
       "reference": "aace19af004144a4", 
       "title": "******" 
      } 
     } 
    }] 
} 

Как вы можете видеть, нет никаких атрибутов документов на JSON. Если я хочу документы базы данных, в я должен позвонить [API_URL]/базы данных/[ID]/домены/[ID]/документы

Там еще способ связать документы в базу данных, указав, что документы можно восстановить по этому URL-адресу (/databases/[ID]/domains/[ID]/Documents)?

ответ

0

Я думаю, что вы ищете HAL API преобразователь JSON API. Чтобы этого не делалось вручную, я бы рекомендовал плагин Ember http://github.com/201-created/ember-data-hal-9000 Ember, который я использовал, чтобы заставить Ember Data играть с Spring Boot.

Если вы хотите увидеть простой пример, вот мое демонстрационное приложение client-side и server-side.

Кроме того, если вам было любопытно, что Ember и JSON API не используют HAL, вы можете здесь прочитать JSON API - FAQ on HAL.

+0

Я уже использую данные ember-data-hal-9000, но это мне не помогает. – KillertO

+0

Эрик, не могли бы вы показать какой-либо пример с использованием ember-data-hal-9000 с текущей версией ember? –

0

Я нашел решение.

Я переопределить метод extractRelationships в HAL сериализатором так:

extractRelationships(modelClass, resourceHash, included) { 
    resourceHash._links["documents"] = { 
     "href" : "/databases/" + resourceHash.id + "/domains/" + (resourceHash.name || resourceHash[modelClass.modelName].name) + "/documents/" 
    }; 
    return this._super(modelClass, resourceHash, included); 
} 

Я просто добавить ссылку на документы для каждого баз данных, возвращенных API.

Я изменил свой маршрут для документов как этот

export default Ember.Route.extend(AuthenticatedRouteMixin, { 
    model() { 
     return this.modelFor('databases.database').get('documents'); 
    } 
}); 

И теперь он работает отлично.

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