【问题标题】:Can you instantiate kendo-ui objects that are dynamically created after page load?您可以实例化页面加载后动态创建的 kendo-ui 对象吗?
【发布时间】:2014-08-23 15:17:21
【问题描述】:

我已经成功地在移动应用中使用了 Kendo-UI 小部件。然而,我当前的应用程序要求我动态加载和使用各种 UI 元素。我尝试过像这样动态实例化 Kendo-UI 小部件:

<ul id="my_ul" >
<script>$('#my_ul').kendoListView().style("inset");</script>
  <li>
    <label>Label 1:
      <input id="dynamicLI1" type="text" name="dynamicLI1" value="" />
    </label>
  </li>
  <li>
    <label>Label 2:
      <input id="dynamicLI2" type="text" name="dynamicLI2" value="" />
    </label>
  </li>
</ul>

这失败了。有没有办法实现这一目标或类似的东西?我真的很喜欢 Kendo-UI,但是在 document.ready() 事件之后创建 Kendo-UI 对象是必须的。


更新 1 这是更新 DOM 的代码

function request() {
  var url = "██████████████████████";
  $.post(url, {deviceUUID: device.uuid})
    .done( function(res) {
        if(res) {
            $("#dynamic").html(res);
        } else {
            alert("Login failed :(\n" + res);
        }
    })
    .fail(function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
    })
    .always(function() {
        alert("post complete");
}

【问题讨论】:

  • 我在 Cordova 应用程序中使用 KendoUI。

标签: kendo-ui kendo-mobile


【解决方案1】:

在您的脚本运行时,&lt;li&gt; 元素尚未创建。 尝试将脚本标签移动到您的 &lt;/ul&gt;

之后
<ul id="my_ul" >
  <li>
    <label>Label 1:
      <input id="dynamicLI1" type="text" name="dynamicLI1" value="" />
    </label>
  </li>
  <li>
    <label>Label 2:
      <input id="dynamicLI2" type="text" name="dynamicLI2" value="" />
    </label>
  </li>
</ul>
<script>$('#my_ul').kendoListView().style("inset");</script>

这个 HTML 是否以某种方式动态添加到 DOM 中?您还可以执行以下操作:

// create new elements
var $list = $('<ul>...rest of html string...</ul>');
var $view = $('#myView');

// add elements to DOM
$view.append($list);

// init kendo list view
$list.kendoListView({
    style: inset
});

更新 1

您也可以通过这样做只依赖声明性小部件初始化:

<ul id="my_ul" data-role="listview" data-style="inset" >
  <li>
    <label>Label 1:
      <input id="dynamicLI1" type="text" name="dynamicLI1" value="" />
    </label>
  </li>
  <li>
    <label>Label 2:
      <input id="dynamicLI2" type="text" name="dynamicLI2" value="" />
    </label>
  </li>
</ul>

和:

    if(res) {
        $("#dynamic").html(res);
        kendo.bind($("#dynamic"), {}, kendo.mobile.ui);
    } else {

它应该初始化在 HTML 中声明的任何/所有小部件和 MVVM 绑定。

【讨论】:

  • 您的第一个建议似乎有效。不幸的是,当我将 ul 初始化为 KendoUI 对象时,它根本不再显示。我不确定为什么会这样。我在 Cordova 应用程序中使用它。
  • 你能分享更具体的代码吗?你是如何将 HTML 添加到 DOM 中的?
  • 我更新了问题。代码中还有其他有用的部分吗?另外,我在 Cordova 应用程序中使用它。
  • 您的更新似乎也不起作用。它显示响应而不被初始化为 Kendo 对象。
猜你喜欢
  • 2010-10-24
  • 2010-09-17
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 2013-03-24
  • 2013-04-12
  • 1970-01-01
相关资源
最近更新 更多