2017-02-13 34 views
0

我有按钮页面“确认NOW”,其中在点击我得到它通过网络保存一个JSON REST适配器。烬数据model.save不是一个函数

/accounts/[email protected]/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') 
}); 

回答

2

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); 
      }); 
     } 
    } 
}); 
+0

谢谢,我接受这个答案,它的工作原理移动到控制器。你能否也展示如何使verifyEmail()在Route上工作? –

+0

尝试此'变种控制器= this.controllerFor(this.routeName); VAR模型= controller.get( '模型')' – kumkanillam

+0

或'VAR控制器= this.controllerFor( 'accounts.show.verification.index'); var model = controller.get('model')'@OhChinBoon让我知道它是否不适合你。 – kumkanillam