0

我试图在更改模板后根据 DropDownList 值重新绑定列表视图数据。我已经包含了一个 JSFiddle 供参考。当我当前重新绑定时,模板中的值是未定义的。谢谢!

JSFiddle 链接

我在想最好的处理方法是在“选择”或“改变”功能中:

var cboDetailsCategory = $("#detail").kendoDropDownList({
data: [
    "All",
    "Customer",
    "Location",
    "Meter",
    "Other"],
select: function (e) {

    var template = $("#" + e.item.text()).html();
    console.log("template", template);
    $("#details").html(template);       
},
change: function (e) {
},

请参考 JSFiddle 链接和这个图形作为视觉

名称搜索完成且用户单击名称后显示的 UI

这是一个更长的工作流程:

  1. 用户完成名称搜索并单击搜索按钮。
  2. 名称结果填充在列表视图中,使用模板单独呈现为按钮控件。
  3. 用户然后单击名称结果之一(显示为按钮文本)。
  4. 类别下拉列表('All' <--default 、'Location'、'Customer'...)使用户能够定位他们想要查看的数据主题。“全部”是默认设置,显示有关所选名称的所有详细信息。
  5. 因此,默认情况下会填充“全部”模板。
  6. 如果用户想查看“位置”详细信息(模板),他们从下拉列表中选择它。
  7. 模板显示,但值都是空白的。填充它的唯一方法是再次单击名称(按钮)。 模板更改后在模板中显示空白值

我想消除必须重新单击按钮(名称)来填充模板(“位置”等...)的需要。

我整理了一个显示结构的 JSFiddle。虽然由于数据是私有的并且通过安全网络提供服务,但我无法访问它。

请参阅 JSFiddle:我认为问题在于 onclick 事件会抓取数据 uid 并将其传递给初始默认模板(名为“全部”,但它不包含在代码中,因为它很长)。当用户更改下拉列表(cboDetailsCategory)并选择一个新模板时,我会丢失数据。

谢谢你的帮助。我真的坚持这一点,它是当前的节目终结者。

4

2 回答 2

1

没有官方支持的方式来更改模板,而不破坏列表视图并重建它。但是,如果您不介意研究一些私​​有 api 的东西(请注意,我不能保证剑道不会在不告诉您的情况下破坏它),您可以这样做

var listview = $("#MyListview").getKendoListView();

listview.options.template = templateString;

listview.template = kendo.template(listview.options.template);
//you can change the listview.altTemplate the same way 

listview.refresh(); //redraws the elements

如果您想防止未知的 API 更改,您可以这样做,这会带来更多开销,但不会有不知情更改的风险(未经测试!)

var listview = $("#MyListview").getKendoListView(),
    options = listview.options;


options.dataSource = listview.dataSource;

listview.destroy();

$("#MyListview").kendoListView(options);
于 2013-11-05T21:05:16.287 回答
0

这是解决方案,感谢大家的帮助! JSFiddle 链接

问题是我在哪里设置绑定:

$("#list").on("click", ".k-button", function (e) {
    var uid = $(e.target).data("uid");
    var item = dataSource.getByUid(uid);
    var details = dropdown.value();
    var template = $("#" + details).html();
    $("#details").html(template);
    kendo.bind($("#details"), item);
    currentData = item;
});
于 2013-11-08T16:04:18.550 回答