2013-01-17 3 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'); 
}, 

그리고이 목록에 전파 변경을 방지 그러나 트랜잭션은 커밋하지 않고 항목은 여전히 ​​더러운 때 모달 창 닫혀있다.

저는 이것을 올바르게 사용하지 않을 것이라고 확신합니다. 아이템이 currentState에 반영되어 커밋되지 않은 한 저장소에서 변경 사항을 유지할 방법이 필요합니다.

항목 상태 isDirty를 사용하면 항목을 완전히 제거했을 때이 문제를 해결하는 데 도움이되지 않습니다. 그 목록은 허용되지 않습니다. 그것은 텍스트 필드 있기 때문에, 당신이 입력하는 동일한 속성에 속성에 바인딩하고 주요 목록의 표현도 바인딩에 그들은 둘 다 얻을, 편집중인 정확한 같은 객체입니다

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

내 대답이 명확하지 않았습니까? 결국이 문제를 해결 했습니까? – albertjan

답변

0

업데이트되었습니다.

Ember-data는 응용 프로그램의 상태가 아닌 백엔드에 지속 객체를 유지 관리합니다.

너는 this을 봐야한다. 그것은 바인딩을 사용하여 즉시 객체를 업데이트하지 않지만 저장 후 버튼 만 클릭하는 게으른 텍스트 필드 객체를 만드는 방법을 설명합니다.