0

私の URL は、クエリ パラメータをフォームhttp://localhost:4099/checkout/schedule/new?addressId=12に渡そうとしているようです。addressId

非表示の入力として送信しようとしましたが、saveアクションにヒットするまでに。Ember インスペクタのタブを確認するNetworkと、次のように渡されます。

{"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')
});
4

1 に答える 1

0

何が起こっているのかは、実際にはフォームを送信していないということだと思います。save()代わりに、モデル データを送信するモデルを呼び出しています。したがって、フォームの隠しパラメーターはここでは役に立ちません。

addressIdURL 内の URL はcontrolleraddressIdのプロパティに関連付けられています。Chromeで送信されているのは、モデル内のプロパティの値です。addressId: nulladdressId

于 2015-01-19T15:43:02.583 に答える