2013-11-24 24 views
0

我在嘗試保存新記錄時收到此消息。我在SmashingMag的網站上重新創建了演練。我正在使用燼數據v0.14。看着提交,似乎有兩個人有同樣的問題(可能與RESTAdapter有關)。任何人都可以提供答案爲什麼?Uncaught TypeError:對象用戶沒有方法'_create'

App = Ember.Application.create({}); 
App.Store = DS.Store.extend(); 

App.User = DS.Model.extend({ 
    first_name: DS.attr('string'), 
    last_name: DS.attr('string'), 
    email: DS.attr('string'), 
    password: DS.attr('string'), 
    created_at: DS.attr('string'), 
    updated_at: DS.attr('string'), 

    fullName: function() { 
     return this.get('first_name') + ' ' + this.get('last_name'); 
    }.property('first_name','last_name') 
}); 

App.Router.map(function(){ 
    this.resource('users',function(){ 
     this.resource('user', {path: '/:user_id'}, function(){ 
      this.route('edit'); 
     }); 
     this.route('create'); 
    }); 
}); 

App.IndexRoute = Ember.Route.extend({ 
    redirect: function() { 
     this.transitionTo('users'); 
    } 
}); 

App.UsersRoute = Ember.Route.extend({ 
    model: function() { 
     return this.store.find('user'); 
    } 
}); 

App.UserRoute = Ember.Route.extend({ 
    model: function(params) { 
     return this.store.find('user', params.user_id); 
    } 
}); 

App.UserEditRoute = Ember.Route.extend({ 
    model: function() { 
     return this.modelFor('user'); // get the same model as the UserRoute 
    } 
}); 

App.UsersCreateRoute = Ember.Route.extend({ 
    model: function(){ 
     // the model for this route is a new empty Ember.Object 
     return Em.Object.create({}); 
    }, 

    // in this case (the create route) we can re-use the user/edit template 
    // associated with the usersCreateController 
    renderTemplate: function(){ 
     this.render('user.edit', { 
      controller: 'usersCreate' 
     }); 
    } 
}); 

App.UsersController = Ember.ArrayController.extend({ 
    sortProperties: ['first_name'], 
    sortAscending: true, 
    usersCount: function() { 
     return this.get('model.length'); 
    }.property('@each') 
}); 

App.UserController = Ember.ObjectController.extend({ 
    deleteMode: false, 

    actions: { 
     edit: function() { 
      // we need transitionToRoute because we are in a controller, otherwise it's transitionTo when in a route 
      this.transitionToRoute('user.edit'); 
     }, 
     delete: function() { 
      this.toggleProperty('deleteMode'); 
     }, 
     cancelDelete: function() { 
      this.set('deleteMode',false); 
     }, 
     confirmDelete: function() { 
      this.get('model').deleteRecord(); 
      this.get('model').save(); 
      this.transitionToRoute('users'); 
      this.set('deleteMode',false); 
     } 
    } 
}); 

App.UserEditController = Ember.ObjectController.extend({ 
    actions: { 
     save: function() { 
      var user = this.get('model'); 
      user.save(); 
      this.transitionToRoute('user',user); 
     } 
    } 
}); 

App.UsersCreateController = Ember.ObjectController.extend({ 
    needs: ['user'], 

    actions: { 
     save: function() { 
      // just before saving, we set the creationDate 
      this.get('model').set('creationDate', new Date()); 
      // create a new user and save it 
      var newUser = this.store.createRecord('user', this.get('model')); 
      newUser.save(); 

      // redirects to the user itself 
      this.transitionToRoute('user', newUser); 
     } 
    } 
}); 
+0

出於好奇,是否有任何理由不使用ED 1.0測試版? – Kingpin2k

+0

因爲它看起來像你。 – Kingpin2k

+0

對ember.js沒有多少經驗。無論如何,比較你的代碼和[ember入門指南](http://emberjs.com/guides/getting-started/creating-a-new-model/)它看起來像你使用'this.store.createRecord()'在錯誤的地方。遵循指南,我會把它放在'App.UsersController = Ember.ArrayController.extend({'。但是這是很簡單的猜測。 –

回答

3

它看起來像答案是你需要升級到燼數據1.0,很高興它是那麼容易;)

3

我有同樣的問題,並試圖圍繞幾個小時。我知道模型上創建將無法正常工作,但我仍然嘗試,並且出現以下錯誤消息:

未捕獲錯誤:您不應在模型上調用create。相反,請撥打createRecord並指定您想要設置的屬性。

我以爲這意味着store.createRecord。這就是我在指南中發現的那個之前不工作的原因。原來在模型上調用createRecord 的作品。

TL; DR:

對我來說改變

this.store.createRecord('user', ...); 

App.User.createRecord(...); 

解決了這個問題。假設您已將用戶定義爲DS.Model的子類。

編輯:

這個線程:Cannot create record after ember-data upgrade狀態的變化實際上是周圍的其他方式。 (另見:https://github.com/emberjs/data/blob/master/TRANSITION.md)。這似乎是我在舊版本0.14(而不是1.0版的beta版)上使用的ember-data。我正在使用紅寶石的'ember-rails'-gem。這可能是問題的一部分。我試圖確保我現在能夠獲得正確版本的ember-data。像之前說的kingpin2k ...

第二編輯:

是的。請忽略我的初始答案!如果您使用的餘燼護欄寶石和我一樣,更新燼數據可以通過以下方式實現:

rails generate ember:install --tag=v1.0.0-beta.4 --ember-data 

否則從灰燼網站手動下載最新版本。

相關問題