ember-data model.save不是一个函数

时间:2017-02-13 06:09:56

标签: ember.js ember-data

我有一个带按钮的页面"现在确认"点击后我会通过JSON REST适配器将其保存到网络中。

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

但我得到了一个" model.save不是一个功能"错误。

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)

模板/帐户/显示/验证/ 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;

路由/帐户/显示/验证/ 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);
      });
    }
  }
});

模型/帐户verification.js:

import DS from 'ember-data';

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

1 个答案:

答案 0 :(得分:2)

Route中的

this.get('model')将返回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);
            });
        }
    }
});