Как передать значение параметра запроса в форму?

Мой URL выглядит как http://localhost:4099/checkout/schedule/new?addressId=12 Я пытаюсь передать параметр запроса addressId к форме.

Я пытался представить его как скрытый вход, но к тому времени, когда он попадает в save действие. Я проверяю Network Вкладка Ember инспектора и вот что она передает:

{"delivery":{"instructions":"foo","deliver_on":"bar","address_id":null}}

address_id все еще null, Что мне не хватает?

Полный код ниже:

// app/pods/checkout/schedule/new/route.js
import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.createRecord('delivery');
    // return this.store.createRecord('delivery', { addressId: this.get('addressId')});
  },
  // Cleanup the controller, when you leave the new route so the stale new record is also
  // removed from the store.
  // You can also use https://github.com/dockyard/ember-data-route instead
  resetController: function (controller, isExiting) {
    var model = controller.get('model');

    if (!model.get('isDeleted') && isExiting && model.get('isNew')) {
      model.deleteRecord();
    } else {
      model.rollback();
    }
  }
});

// app/pods/checkout/schedule/new/controller.js
import Ember from 'ember';

export default Ember.Controller.extend({
  queryParams: ['addressId'],
  addressId: null,

  actions: {
    save: function() {
      var _this = this;

      // this.get('model').set('addressId', this.get('addressId'));
      this.get('model').save().then(function(){
        _this.transitionToRoute('checkout.address.index');
      }, function() {
        // Need this promise, so we can render errors, if any, in the form
      });

      return false;
    },
    cancel: function() {
      return true;
    }
  }
});

// app/pods/checkout/schedule/new/template.hbs
<form {{action "save" on="submit"}}>
  {{addressId}}
  {{input type="hidden" value=addressId}}

  <p>
    <label>Instructions:
      {{input value=model.instructions}}
    </label>

    {{#each error in errors.instructions}}
      <br />{{error.message}}
    {{/each}}
  </p>

  <p>
    <label>Deliver on:
      {{input value=model.DeliverOn}}
    </label>

    {{#each error in errors.DeliverOn}}
      <br />{{error.message}}
    {{/each}}
  </p>

  <input type="submit" value="Next"/>
  <button {{action "cancel"}}>Cancel</button>
</form>

// app/models/delivery.js
import DS from 'ember-data';

export default DS.Model.extend({
  address:      DS.belongsTo('address', { async: true }),
  items:        DS.hasMany('item', { async: true }),
  instructions: DS.attr('string'),
  deliverOn:    DS.attr('string')
});

1 ответ

Я считаю, что происходит то, что вы на самом деле не отправляете свою форму. Вместо этого вы звоните save() на вашей модели, которая представляет данные вашей модели. Поэтому скрытый параметр в форме вам здесь не поможет.

Ваш addressId в URL привязан к вашему addressId свойство в контроллере, где в качестве addressId: null вы видите, что отправка в Chrome является значением addressId свойство в модели

Другие вопросы по тегам