剑道MVC图表 - 渲染事件问题

时间:2016-05-09 17:37:23

标签: javascript kendo-ui kendo-asp.net-mvc

所以我使用Telerik的Kendo MVC包装器来渲染条形图。

当触发Render事件时,我输入一个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 Kendo方法,如何取消自定义compareChart.setOptions js功能。

感谢您的建议......

感谢, 鲍勃

1 个答案:

答案 0 :(得分:1)

您可以在javascript中取消绑定并绑定kendo事件。例如尝试类似:

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事件触发,而不会阻止由剑道代码触发的事件。