2016-05-09 13 views
0

私はTelerikの剣道MVCラッパーを使って棒グラフをレンダリングしています。剣道MVCチャート - レンダーイベントの問題

レンダリングイベントがトリガされると、JavaScript関数を入力します。しかし、setOptions()メソッドを使用してグラフのサイズを変更しようとすると、無限ループに陥ります。例えば

onRender: function (e) 
 
    { 
 
     e.preventDefault(); 
 

 
     console.log("Render"); 
 
     var compareChart = $("#chart").data("kendoChart");   
 

 
     var wt = compareChart.element.parent().width(); 
 
     var ht = compareChart.element.parent().parent().height() 
 
     
 
     // **** THIS CAUSES TO TRIGGER onRender INFINITELY **** 
 
     compareChart.setOptions({ chartArea: { height: ht, width: wt } }); 
 

 
     return; 
 
    }
@(Html.Kendo().Chart() 
 
    .Name("chart") 
 
    .ChartArea() 
 
    .series.Bar() 
 
    .Events(events => events 
 
    .Render("onRender")  // *** ON RENDER EVENT *** 
 
)

私はのようなものを使用しなければならないことを疑うe.preventDefault();ではなく、剣道ラッパー定義でそれを設定する方法がわから:

.Events(events => events 
     .Render("Whatif.onRender")  
) 

方法一度私のカスタムonRender js関数をキャンセルすることはできますか?compareChart.setOptions剣道の私thod。

あなたのアドバイスが高く評価され...

おかげで、 ボブ

答えて

1

あなたがバインド解除およびJavaScriptで剣道イベントをバインドすることができます。たとえば、次のように試してみてください:

compareChart.unbind('render'); 
compareChart.setOptions({ chartArea: { height: ht, width: wt } }); 
compareChart.bind('render', onRender); //Probably need to prefix onRender with the parent object 

これは、あなたの関数がsetOptionsの実行中に再びトリガーしないことを意味します。もちろん、一度だけ実行する必要がある場合は、イベントを再度バインドする必要はありません。

防止策として、preventDefault()は関連するDOMイベントが発生するのを止めるだけで、剣道コードでトリガされるイベントは停止しません。

+0

明日は試してみます。私は、グローバルなjsブール変数をハックとして追加しました。しかし理想的ではない。 –

関連する問題