Kendo UI Tabstrip MVC - .data(“kendoTabStrip”)最初是未定义的

时间:2013-10-31 17:18:45

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

代码:

var orderDetailsTabStrip = $('#OrderDetailsTabs').data("kendoTabStrip");
orderDetailsTabStrip.select(tabIndexToSelect);

在doc ready期间尝试引用kendo ui tabstrip时遇到问题,或者我只是将调用放在页面底部的脚本块中。我收到一个错误:

Cannot call method 'select' of undefined

如果我在setTimeout中使用此代码将函数的调用包装在任何时间> = 500ms,它就可以工作。所以似乎问题是在我引用标签之前,有些Kendo函数需要在页面加载期间先完成?

这有效:

setTimeout(function () { selectOrderDetailTab() }, 500);

我不喜欢这个,因为我不确定这需要等待什么,以及500毫秒是否总能正常工作。显然,我可以推迟更高的延迟,以确保它始终有效,但代价是用户的性能降低。是否有某种Kendo事件表明它何时完成它可以用作触发器然后调用我的函数?

1 个答案:

答案 0 :(得分:1)

如果您正在使用mvc帮助程序,则需要确保上面的代码(获取窗口小部件实例)发生在从帮助程序插入的脚本标记之后。

帮助程序将脚本标记插入到在文档就绪上运行代码的页面中。由于每个文档就绪处理程序按照绑定的顺序触发,因此您需要确保代码为:

  1. 在其自己的$(document).ready()函数
  2. 您的$(document).ready()函数在kendo生成一个
  3. 后被绑定

    实际上这通常意味着您需要在body标记之后运行代码,除非您使用.Deferred()帮助程序选项,在这种情况下需要在WriteScripts之后发生条命令

    <body>
        //kendo inserts your widget
        <div id="#OrderDetailsTabs"></div>
        <script> 
            //this is the equivillent to $(document).ready()
            jQuery(function() { 
                $('#OrderDetailsTabs').kendoTabStrip({ options: "goHere" }); 
            } );
        </script>
    </body>
    <script>
          $(document).ready(function(){
              var orderDetailsTabStrip = $('#OrderDetailsTabs').data("kendoTabStrip");
    
              orderDetailsTabStrip.select(tabIndexToSelect);
          });
    </script>