0
votes

I am trying to use the JSON API Adapter with ember-cli 2.5.1 , but I'm having a bit of trouble.

I have a todo-list.js model, which has a "hasMany" relationship to todo-list-item.js. Getting the todo-list, the server returns this:

    {
      "links": {
        "self": "http://localhost:4200/service/v1/todolists/b-tlst-af69786c-cbaf-4df9-a4a3-d8232677006a"
      },
      "data": {
        "type": "todo-list",
        "id": "b-tlst-af69786c-cbaf-4df9-a4a3-d8232677006a",
        "attributes": {
          "name": "b1-TodoList",
          "created-on": 1468474962458,
          "modified-on": 1468474962458
        },
        "relationships": {
          "todolistitems": {
            "data": {
              "type": "todo-list-item",
              "id": "b-todo-b5e3c146-d93a-4f97-8540-875bbcd156ca"
            }
          }
        }
      }
    }

If there had been two TodoListItem children instead of one, the value of that "data" key would have been an array, rather than an object.

After receiving this, I was expecting the Ember Chrome plug-in's "Data" tab to show 1 TodoList and 1 child TodoListItem. Instead, it shows 1 TodoList and 0 TodoListItems.

I note from the Network tab that the browser never makes a request to get the items listed in the "data" section of the response.

Is the relationships section above correct and sufficient?

1
Do you access the relationship data in your application? E.g. by doing a simple {{log todoList.items}} ? ember.js only loads data that is accessed. - Timm
Yes. In the code that follows, "todoList" is valid, but its "todoListItems" property is undefined. The todoList.get('todoListItems') line does not result in the data loading (that is, visible in the ember data browser plugin's "data" section): let todoList = this.get('todoList'); if (todoList) { todoList.get('todoListItems'); } - Marc

1 Answers

0
votes

It turns out to have been caused by promise misunderstandings on the client side, and additionally, on the server I had to put dashes in the "relationships" key (i.e. "todo-list-items") and make the value of "data" an array.