페이지에 제품을 나열하고 사용자가 모달 창에서만 제품 속성을 편집 할 수있는 시나리오가 있습니다.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}}
내 대답이 명확하지 않았습니까? 결국이 문제를 해결 했습니까? – albertjan