Данные Ember не добавляют параметры к запросу

Данные Ember просто не добавляют параметры к запросу. У меня есть маршрут тегов, подобный этому

пример

App.TagsRoute = Ember.Route.extend({
 model: function(params) {
    var tag = params.tag_name;
    var entries = this.store.find('entry', {tags: tag});
    return entries;
 }
});

но это продолжает делать тот же запрос, что и this.store.find('entry'). я делаю это неправильно?

Изменить:

Мой роутер выглядит так:

App.Router.map(function(){
 this.resource('entries', function(){
  this.resource('entry', { path: '/entry/:entry_id/:entry_title' });
 });
 this.route('tags', { path: '/t/:tag_name' });
});

когда я запрашиваю (например) localhost:8888/#/t/tag
значение params.tag_name равно 'tag'

изменить2:

Мой REST-адаптер

App.ApplicationAdapter = DS.RESTAdapter.extend({
    bulkCommit: false,
    buildURL: function(record, suffix) {
      var s = this._super(record, suffix);
      return s + ".json";
    },
    findQuery: function(store, type, query) {
      var url = this.buildURL(type.typeKey), 
      proc = 'GET', 
      obj = { data: query },
      theFinalQuery = url + "?" + $.param(query);
      console.log(url); // this is the base url
      console.log(proc); // this is the procedure
      console.log(obj); // an object sent down to attach to the ajax request
      console.log(theFinalQuery); // what the query looks like
      // use the default rest adapter implementation
      return this._super(store, type, query);
    }
 });

изменить3:

внося некоторые изменения в мой объект TagsRoute, я получаю следующий вывод:

App.TagsRoute = Ember.Route.extend({
 model: function(params) {
    var tag = params.tag_name;
    var query = {tags: tag};
    console.log(query);
    var entries = this.store.find('entry', query);
    return entries;
 }
});


вывод в консоль при запросе localhost:8888/#/t/tag

Object {tags: "tag"}
(URL-адрес хоста) + api/v1/entries.json
GET
Object {data: Object}
(URL-адрес хоста) + api/ v1/entries.json?tags=tag
Class {type: function, query: Object, store: Class, isLoaded: true, meta: Object…

Данные Ember присоединяют параметры GET . я думаю, что моя ошибка, возможно, связана с запрошенным URL-адресом, он должен быть примерно таким:
(URL-адрес хоста) + api/v1/tags/:tag_name.json
вместо
(URL хоста) + api/v1/entries.json?tags=:tag_name

РЕШЕНИЕ

сборка ember-data (ember-data 1.0.0-beta.3-16-g2205566) не работает. Когда я изменил src скрипта на builds.emberjs.com.s3.amazonaws.com/canary/daily/20131018/ember-data.js, все заработало отлично.
правильный способ добавления параметров GET:

var query = {param: value};
var array = this.store.find('model', query);

Спасибо за вашу помощь


person Camilo    schedule 19.10.2013    source источник
comment
Какой запрос отправляется?   -  person Kingpin2k    schedule 19.10.2013
comment
я отредактировал вопрос @daniel   -  person Camilo    schedule 19.10.2013


Ответы (2)


Вы все делаете правильно, вы уверены, что запрос, отправляемый обратно на сервер, не содержит запроса?

Полный запрос не создается до тех пор, пока JQuery не сделает вызов.

Вы смотрели на вкладку сети в Chrome (или любом другом браузере, который вы используете), чтобы увидеть, что он отправляет обратно.

Посмотрите на консоль в jsbin ниже, она показывает, что происходит, когда вы используете find с объектом (для запроса):

App.MyAdapter = DS.RESTAdapter.extend({
 findQuery: function(store, type, query) {
    var url = this.buildURL(type.typeKey), 
        proc = 'GET', 
        obj = { data: query },
        theFinalQuery = url + "?" + $.param(query);
    console.log(url); // this is the base url
    console.log(proc); // this is the procedure
    console.log(obj); // an object sent down to attach to the ajax request
    console.log(theFinalQuery); // what the query looks like
    // use the default rest adapter implementation
    return this._super(store, type, query);
  },
});

http://emberjs.jsbin.com/AyaVakE/1/edit

Дополнительный вопрос:

hitting: http://localhost:8888/#/t/tag запускает маршрут тегов, отправляя «тег» на имя тега. Ваш модельный крючок правильный. Где вы видите, что запрос один и тот же?

Кроме того, вы упомянули store.find('entries) и store.find('entry'). Я знаю, что они обрабатывают множественное число большинства вещей, но вы должны убедиться, что они в конечном итоге являются одной и той же конечной точкой /api/entries.

person Kingpin2k    schedule 19.10.2013
comment
спасибо за ваш ответ @daniel ! записи и ресурсы записей указывают на api/entries. Если я запрашиваю (пример) localhost:8888/#/t/tag, API фильтрует ответ с параметром «тег». в этом случае я должен указать на api/tags/tag.json (с param = 'tag'). Вкладка сети в chrome показывает мне тот же запрос, что и this.store.find('entry'). без прикрепленных параметров GET, вот в чем проблема. (я вижу этот запрос) - person Camilo; 19.10.2013
comment
Если вы добавите и используете адаптер, показанный выше, и используете его вместо него, что он выведет на консоль? - person Kingpin2k; 19.10.2013
comment
Какую версию Ember Data вы используете? - person Kingpin2k; 19.10.2013
comment
позвольте мне попробовать с вашим адаптером. Я использую ember 1.0.0 и ember-data 1.0.0-beta.3-16-g2205566. - person Camilo; 19.10.2013
comment
я редактировал с новым адаптером отдыха. консоль ничего не выводит - person Camilo; 19.10.2013
comment
Будете ли вы вытаскивать объект в запросе на поиск (своей модели хука), вот так, и консоль его. var тег = params.tag_name; var запрос = { теги: тег }; console.log(запрос); записи var = this.store.find('запись', запрос); - person Kingpin2k; 19.10.2013
comment
Вы спасли? я не вижу никаких изменений - person Kingpin2k; 19.10.2013
comment
Итак, вы пытаетесь получить теги или записи? - person Kingpin2k; 20.10.2013
comment
я пытаюсь получить записи, помеченные параметром tag_name (для этого я использую драгоценный камень ActsAsTaggableOn) - person Camilo; 20.10.2013
comment
на стороне сервера маршрут 'api/v1/tags/:tag' указывает на контроллер entry#index - person Camilo; 20.10.2013
comment
Я не знаком с ruby, но похоже, что проблема в том, что ваш бэкенд не соответствует конечной точке, являющейся стандартом Ember Data. Стандарт Ember Data: /type/id или /type?param=value. - person Kingpin2k; 20.10.2013
comment
да, похоже, это проблема маршрутизации. я буду продолжать пытаться изменить свой бэкэнд. спасибо @Daniel! - person Camilo; 20.10.2013
comment
на самом деле... я могу сделать (и делаю): host + /api/v1/entries.json?tag=:tag_name для фильтрации записей с тегами, но инспектор Chrome в сетевом разделе показывает мне запрос без ?tag= :tag_name (не знаю почему) - person Camilo; 20.10.2013
comment
Пробовали ли вы выполнить отладку метода find в магазине и убедиться, что он входит в метод findQuery? - person Kingpin2k; 20.10.2013
comment
я думаю, что это входит в findQuery, потому что консоль выводит значение url, proc, obj и theFinalQuery - person Camilo; 20.10.2013
comment
Ха, это сумасшествие, я думаю, это часть азарта использования бета-версий. Я не могу дождаться стабильной версии 1.0 ED - person Kingpin2k; 20.10.2013

RESTAdapter отправляет ваш объект запроса методу jQuery.ajax(), прикрепляя его к свойству data объекта настроек. (См. здесь информацию о том, что делается с объектом настроек.)

Похоже, что имя тега не определено. Постарайтесь убедиться, что параметр tag_name правильно поступает из вашего маршрута.

person ahaurw01    schedule 19.10.2013