2013-01-17 21 views
2

我有一個場景,其中列出產品在頁面中並允許用戶僅在模式窗口中編輯產品的屬性。Emberjs:防止在整個交易中更改傳播

當用戶點擊產品並開始編輯產品的屬性時,更改會立即傳播到產品列表頁面中的產品以及直接或間接綁定到正在進行更改的屬性頁面的任何部分。不是所需的行爲。只有當用戶確認的變化即保存按鈕更改應該傳播點擊,提交事務和模態窗口關閉

transaction: APP.store.transaction(), 

renderTemplate:function(controller, record) { 
    this.transaction.add(record); 
    // append the modal view 
    App.ModalView.create().append();   
}, 

onSaveClick: function(record) { 
    this.transaction.commit(); 
    this.transitionTo('products'); 
}, 

理想我需要指示灰燼,直到事務被提交到停止傳播在產品上的任何變化。我試圖用beginPropertyChanges和endPropertyChanges推遲通知任何相關的觀察者這樣說:

renderTemplate:function(controller, record) {   
    this.transaction.add(record); 
    record.beginPropertyChanges(); 
    // append the modal view 
    App.ModelView().create().append();   
}, 

onSaveClick: function(record) { 
    record.endPropertyChanges(); 
    this.transaction.commit(); 
    this.transitionTo('products'); 
}, 

這樣可以防止傳播到列表中的變化,但是成交不提交,該項目還是很髒,當模態窗口關閉了。

我很確定我沒有正確使用它。我需要一種方法來保持遠離商店的更改,只要該商品未被提交就會反映出其當前狀態

使用商品狀態isDirty無助於解決此問題,因爲使用該商品時,商品已完全從該清單,這是不可接受的。

{{#each item in controller}} 
    {{#unless item.isDirty}} 
    {{item.name}} 
    {{/unless}} 
+0

我的回答不清楚嗎?你最終解決了這個問題嗎? – albertjan

回答

0

這是您正在編輯的確切同一個對象,因爲文本框,你輸入,在被綁定到的屬性,並在主列表中的表現也勢必相同的屬性,他們都得到更新。

Ember-data需要注意將對象持久保存到後端,而不是在應用程序中的狀態之間。你可以看看this。它解釋瞭如何製作一個懶惰的文本字段對象,它不會立即用綁定更新對象,而只是在點擊保存按鈕之後。