2011-03-01 4 views
0

편집 가능한 표, 저장 및 버튼이 있습니다. 버튼은 가게에 복사를 선택한 레코드를 복사하여 추가하도록되어 핸들러가 있습니다스토어에 레코드 추가

var a = gridPanel.getSelectionModel().getSelectedCell(); 

    var rec = store.getAt(a[0]).copy(); 
    store.addSorted(rec); 
    alert (store.getAt(1).get('date')); 

그러나 저장 및 그리드가 업데이트되지 않습니다. 경고에 오류가 있습니다. 정의되지 않은 메서드를 호출 할 수 없습니다.

무엇이 문제입니까?

답변

1

아마도 복사 한 레코드의 ID가 동일하므로 저장소에이 ID를 삽입하면 같은 ID를 가진 다른 레코드가 이미 존재하게됩니다.

복사 한 레코드를 저장소에 추가하기 전에 새 ID를 생성하여 적용하는 경우 작동해야합니다. 다음 코드는 인수로 전달 된 레코드에 새 ID를 생성합니다. Ext.data.Record.copy의 설명서를 확인하십시오. 대부분의 자바 스크립트 개발자가해야 할

Ext.data.Record.id(rec); 
0

몇 가지 :

  1. 를 사용하여 불을 지르고, 모든 오류에 휴식 시간에 설정 한 경우는 당신에게 그 store.get (1) 반환 undefing을 보여 아마 것이며, 정의되지 않은 함수를 호출하려고하면 오류가 발생합니다.

  2. 이제 firebug를 사용하여 console.log() 문을 window.alert()에 사용하십시오. console.log를 사용하면 실제로 검사 할 수 있으며 비동기 작업 및 마우스 이벤트에도 유용합니다. 문제에 관해서는

: 당신이 그것에게 ID를 제공하지 않는 경우 문제를 일으킬 가게에 삽입 한 후 record.copy()를 호출합니다. 당신이 불을 지르고 있었고, 코드를 보였다 경우이 우연히 것 :

var rec = store.getAt(a[0]).copy(); 
var id = Ext.data.Record.id(id); 
rec.id = id; 

코드가 지저분 해 보이지만 :

if(this.containsKey(key)){ 
this.suspendEvents(); 
this.removeKey(key); 
this.resumeEvents(); 
} 

당신이 이런 식으로 뭔가를 할 수있는 고유 키를 사용하여 레코드를 생성하려면 그것을하는 많은 좋은 방법이 아닙니다. 그것이 나 였다면 복사 기능을 재정 의하여 레코드의 id가 자동으로 생성되도록하는 부울을 취할 것입니다.

+0

감사합니다. 크롬을 사용하여 "요소 검사"- 나를 위해 잘 작동합니다. 내가 그 이유를 이해할 수는 없지만 rec가 삽입되지 않았다는 것을 알았습니다. – lvil

관련 문제