0

我目前正在编写一个应用程序,该应用程序在一些网格渲染器中发生了一些自定义 html。我使用的代码在外部运行应用程序或在自定义 HTML 应用程序中运行时有效,但在 Rally 面板中不起作用 - 在运行迁移等之后。这是相关的一小段代码:

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'即使我知道应该这样做,也会出现错误。

4

2 回答 2

0

我一直不明白为什么 Rally 的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
        }}
    ]
});

在侦听器之后,我刚刚搜索了添加到 a 标记的类名,并通过元素的 id 传递了 rowIndex,一切都解决了!

于 2013-08-14T22:03:11.970 回答
0

许多人使用的另一个技巧是执行以下操作:

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

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

我不确定这是否适用于您的情况,因为您正试图将其放入 onclick 侦听器中,但这种策略可能会有所帮助。

于 2013-08-14T23:11:37.747 回答