ember-数据model.save不是函数

ember-data model.save is not a function

我有一个带有按钮 "CONFIRM NOW" 的页面,点击后我将使用 JSON REST 适配器将其保存到网络中。

/accounts/chinboon@gmail.com/verification
/accounts/{email}/verification

但我遇到 "model.save is not a function" 错误。

Uncaught TypeError: model.save is not a function
    at Class.verifyEmail (index.js:19)
    at Router.triggerEvent (ember.debug.js:28654)
    at trigger (ember.debug.js:55917)
    at Router.trigger (ember.debug.js:57517)
    at Class.send (ember.debug.js:27844)
    at Class.send (ember.debug.js:31852)
    at ember.debug.js:11639
    at Object.flaggedInstrument (ember.debug.js:18475)
    at ember.debug.js:11638
    at Backburner.run (ember.debug.js:717)

templates/accounts/show/verification/index.hbs:

<section class="main-content">
  <div class="container-fluid" style="border:1.0rem solid #fff;">
    <div class="row">
      <div class="col-xs-12 col-sm-7 col-lg-6">
        <form {{action "verifyEmail" on="submit"}}>
          <div class="form-group">
            <h2>Confirm your email now to complete the registration</h2>
          </div>

          <div class="mt10">
            <button type="submit" class="btn btn-success">CONFIRM NOW</button>
          </div>
        </form>
      </div>
    </div>
    <div class="row mt20">
      <div class="col-xs-12 col-sm-7 col-lg-6">
        You are receiving this email because ...
      </div>
    </div>
  </div>
</section>

router.js:

import Ember from 'ember';
import config from './config/environment';

const Router = Ember.Router.extend({
  location: config.locationType,
  rootURL: config.routerRootURL
});

// page route
Router.map(function() {
  this.route('accounts', function() {
    // /accounts/new
    this.route('new', function () {
      //this.route('success');
    });

    this.route('show', { path: '/:account_id' }, function() {
      // /accounts/1/confirmation
      this.route('confirmation');
      // /accounts/1/verification
      this.route('verification', function() {
        // /accounts/1/verification/success
        this.route('success');
      });
    });
  }); 
});

export default Router;

routes/accounts/show/verification/index.js:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params) {
    return this.store.createRecord('account-verification');
  },

  actions: {
    /* account email verification */
    verifyEmail() {
      var model = this.get('model');

      var self = this;

      <<<<<PROBLEM HERE, "MODEL.SAVE IS NOT A FUCTION">>>>>
      model.save().then(function(data) {
        // handle success
        // route user to success page
      }).catch((adapterError) => {
        console.log(adapterError);
      });
    }
  }
});

models/account-verification.js:

import DS from 'ember-data';

export default DS.Model.extend({
  email: DS.attr('string'),
  secretToken: DS.attr('string')
});

this.get('model') 内部路由将 return model 函数不是您通过 model 方法创建的记录。因此,您需要将此操作移动到相应的控制器或使用 controllerFor 并从控制器获取模型。

将操作移动到 controllers/accounts/show/verification/index.js 文件。

import Ember from 'ember';
export default Ember.Controller.extend({
    actions: {
        /* account email verification */
        verifyEmail() {
            var model = this.get('model');
            var self = this;
            model.save().then(function(data) {
                // handle success
                // route user to success page
            }).catch((adapterError) => {
                console.log(adapterError);
            });
        }
    }
});