0

代码:

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

在文档准备期间尝试引用 kendo ui 选项卡时出现问题,或者我只是将调用放在页面底部的脚本块中。我得到一个错误:

Cannot call method 'select' of undefined

如果我在任何时间> = 500ms 的时间内使用此代码将对该函数的调用包装在 setTimeout 中,则它可以工作。所以看起来问题是一些剑道功能需要在页面加载期间首先完成,然后我才能引用标签条?

这有效:

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

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

4

1 回答 1

1

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

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

  1. 在它自己的$(document).ready()功能里面
  2. 你的$(document).ready()功能在剑道生成后绑定

实际上,这通常意味着您需要在标记之后运行代码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>
于 2013-10-31T18:55:07.070 回答