2013-08-14 1 views
0

현재 일부 그리드 렌더러에서 일부 맞춤 html을 사용하는 앱을 작성 중입니다. 코드는 내가 외부 또는 사용자 정의 HTML 응용 프로그램에서 응용 프로그램을 실행할 때 작품을 사용하고 있지만, 랠리 패널 내부에서 작동하지 않습니다 - 마이그레이션 및 모든 프로그램을 실행 한 후.HTML 하이퍼 링크 내부에 랠리 앱 가져 오기

this.add({ 
    xtype: 'rallygrid', 
    ... 
    columnCfgs: [ 
     {...}, 
     {text: 'Task Details', renderer: function(value, metaData, record, rowIndex) { 
      if (record.displayLink) { 
       return '<a href="#" onclick="Rally.getApp()._showTasks(\'' + 
        rowIndex + '\'); return false;">Show Tasks</a>'; 
      } 
      return ''; 
     }} 
    ] 
}); 

이 코드 청크의 흥미로운 부분은 이것이다 : 다시, 사용자 정의 HTML 응용 프로그램 내부에서 외부 & 작동

'onclick="Rally.getApp()._showTasks(\'' + rowIndex + '\');"' 

여기에 관련 코드의 작은 비트입니다. _showTasks()과 같이 앱의 기능을 사용할 수 있도록 Rally.getApp() 부분이 필요합니다. 집회와 링크가 클릭되면, 내가 알기는하지만 어쨌든 TypeError: Object #<Object> has no method 'getApp'이라고 말하는 오류가 발생합니다. 랠리의 getApp() 방법은 사라진 이유

답변

0

내가 알아 낸 것이 아니요 오직 내 두통에 대한 해결책을 찾았어요!

대신 내 함수로 얻을 수있는 HTML 하이퍼 링크를 사용하여, 나는이 같은 열에 리스너를 사용 :

this.add({ 
    xtype: 'rallygrid', 
    ... 
    columnCfgs: [ 
     {...}, 
     {text: 'Task Details', renderer: function(value, metaData, record, rowIndex) { 
      if (record.displayLink) { 
       return '<a href="#" class="link" id="' + rowIndex + 
        '" onclick="return false;">Show Tasks</a>'; 
      } 
      return ''; 
     }, 
     listeners: { 
      click: function(me, td, cellIndex, record, element) { 
       if (element.target.className === "link") { 
        this._showTasks(parseInt(element.target.id, 10)); 
       } 
      }, 
      scope: this 
     }} 
    ] 
}); 

난 그냥이 태그에 추가 된 클래스 이름을 검색 청취자 후와 요소의 id를 통해 rowIndex를 전달하면 모든 것이 잘 풀렸다. 많은 사람들이 사용

0

또 다른 트릭 같은 것을하는 것입니다 :

launch: function() { 
    App = this; 
    ... 
} 

... 
// somewhere else in the app 
    App._showTasks(); 

나는 당신이 온 클릭 리스너에 넣어 위해 노력하고 있기 때문에이, 귀하의 경우 작동하는지 확실하지 않다가, 이 전략이 도움이 될 수 있습니다.

+0

좋은 아이디어! 내부 및 사용자 정의 HTML 응용 프로그램에서 작동하지만 어떤 이유로 랠리 패널 여전히 그것을 좋아하지 않았다. –