2013-08-14 4 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 ''; 
     }} 
    ] 
}); 

Интересная часть этого куска кода заключается в следующем:

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

Который, опять-таки, работает внешне & внутри пользовательских HTML приложения. Часть Rally.getApp() необходима, поэтому я могу получить функции приложения, такие как _showTasks(). Когда внутри Rally и ссылка нажата, ошибка такова, что TypeError: Object #<Object> has no method 'getApp', хотя я знаю, что это должно.

ответ

0

Я никогда не понял, почему метод ралли getApp() исчез, но я нашел решение своей головной боли!

Вместо того чтобы использовать 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 
     }} 
    ] 
}); 

После слушателя я просто искал для имени класса я добавил в теге и передал rowIndex через id элемента и все получилось!

0

Другой трюк, который много людей используют, чтобы сделать что-то вроде этого:

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

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

Я не уверен, если это будет работать в вашем случае, поскольку вы пытаетесь положить его в OnClick слушателя, но эта стратегия может быть полезна.

+0

Хорошая идея! По какой-то причине, которая работала внутренне и в пользовательском приложении HTML, но ралли-панель не понравилась. –