2013-03-20 71 views
0

無法保存或創建新記錄我試圖用emberjs創建一個簡單的博客應用程序。爲這個帖子創建標題和正文的功能可以很好地工作,如此處所示jsfiddleemberjs無法使用emberjs-1.0.0-rc.1和ember-data修訂版-11

現在我想添加下一個功能,這是註釋,當您單擊某個帖子時應該顯示該功能。在主頁上點擊帖子,然後點擊個人的標題,應該顯示評論框以添加評論。

我收到以下錯誤,當我點擊使用餘燼數據,其餘適配器保存按鈕

在我的本地開發環境,我得到的錯誤:

uncaught TypeError: Cannot call method 'commit' of undefined 

在JSfiddle中使用具有相同代碼的燈具適配器,錯誤變爲

TypeError: this.transaction is undefined this.transaction.commit(); 

帖子/ show.handlebars

<script type="text/x-handlebars" data-template-name="posts/show"> 
     <h1>Post</h1> 
     <p>Your content here.</p> 
     <h3> {{title}} </h3> 
     <h3> {{body}} </h3> 
    </br> 
    <p> {{#linkTo 'posts.index'}} back {{/linkTo}}</p> 
    <p> {{#linkTo 'posts.edit' content}} Edit the post {{/linkTo}}</p> 
    <br/> 
    <p> Add Comments</p> 
     {{render 'comment/new' comments}} 
    </script> 

評論/ new.handlebars

<form {{action save on='submit'}}> 
    {{view Ember.TextArea valueBinding='body' placeholder='body'}} 
    <button type="submit"> Add comment </button> 
</form> 

    EmBlog.CommentNewController = Em.ObjectController.extend({ 
    needs: ['posts'], 
    addComment: function(){ 
     post = this.get('controllers.postsShow').get('model'); 
     comment = post.get('comments') 
     this.transaction = comment.get('store').transaction.createRecord({body: body}); 
    }, 

    save: function(){ 
     this.transaction.commit(); 
    } 
    }); 

EmBlog.Comment = DS.Model.extend({ 
    body: DS.attr('string'), 
    post_id: DS.attr('integer')' 
    post: DS.belongsTo('EmBlog.Post') 
}); 

如何在方式,每次我創建註釋時,它將包括POST_ID解決這個問題的任何建議。

**Update** 

這是latest gist,當我保存評論,但評論不會出現在網頁上不顯示任何錯誤。看起來他們被默默地忽略了。

回答

2

DS.Store#transaction是一個函數,而不是一個屬性。它返回一個DS.Transaction ...但是,您立即打電話給createRecord,所以您實際上將該調用的結果(記錄)存儲在您的事務屬性中。此外,DS.Transaction上的createRecord需要一個類型作爲第一個參數。

因爲這是一個ObjectController,所以我們必須在我們的類定義中定義我們的內部屬性,否則它們會傳遞給內容。

EmBlog.CommentNewController = Em.ObjectController.extend({ 
    transaction: null, 

然後在你的實際代碼:

var transaction = post.get('store').transaction(); 
if (transaction) { 
    this.set('transaction', transaction); 
    transaction.createRecord(EmBlog.Comment, {body: body}); 
} else { console.log('store.transaction() returned null'); } 

再後來:

this.get('transaction').commit(); 

注意,註釋不會自動作用域爲Post,所以一定要設定你的關係。

+0

非常感謝@christopher的幫助。我用上面的代碼片段替換了我的jsfiddle的相關部分,但它仍然返回了一個新的錯誤** TypeError:this.transaction未定義**。感謝您的任何新建議 – brg 2013-03-20 18:14:23

+0

因爲您使用的是objectController,控制器會嘗試在其內容上設置該屬性。您需要在定義控制器時將'transaction'定義爲控制器上的一個屬性。 – 2013-03-20 18:30:09

+0

謝謝@christopher。我將'transaction'定義爲控制器上的一個屬性,並且有此錯誤。當我在控制器中將它定義爲**事務時:'**,它返回錯誤:** TypeError:this.transaction.commit不是函數**。但是,當它被定義爲 ** transaction:null **時,它將返回錯誤:** TypeError:this.transaction爲null ** – brg 2013-03-20 18:53:41

相關問題