0

現在、いくつかのグリッド レンダラー内でカスタム 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()TypeError: Object #<Object> has no method 'getApp'Rally 内でリンクをクリックすると、そうすべきだとわかっていても、エラーがスローされます。

4

2 に答える 2

0

多くの人が使用する別のトリックは、次のようなことです。

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

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

onclickリスナーに入れようとしているので、これがあなたの場合にうまくいくかどうかはわかりませんが、この戦略は役立つかもしれません.

于 2013-08-14T23:11:37.747 に答える
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
        }}
    ]
});

リスナーの後、タグに追加したクラス名を検索し、要素の ID を介して rowIndex を渡し、すべてがうまくいきました!

于 2013-08-14T22:03:11.970 に答える