从外部源加载itemTemplate for WinJS.UI.ListView

时间:2013-11-07 13:50:47

标签: winjs windows-8.1

我想知道是否有人可以解释为什么这不起作用。

如果我在html视图(First Scenario)中定义模板,我可以成功动态模板化每个WinJS.UI.ListView项。但是,如果我使用$ .get语句从单独的html文件加载模板,则它不起作用(Second Scenario)。

self.selectTemplate = function (itemPromise) { return itemPromise.then(function (item) { ...

第一种情景:

(var itemTemplate = document.getElementById(item.data.controlType + "ItemTemplate");

var container = document.createElement("div");

itemTemplate.winControl.render(item.data, container);

return container;)

第二种情景:

(var itemTemplatePromise = ko.bindingHandlers.searchPropertyBuilder.loadTemplate(item.data.controlType);

itemTemplatePromise.done(function (itemTemplateLoaded) {

var templateContainer = document.createElement("div");

    templateContainer.innerHTML = itemTemplateLoaded;
    templateElement = templateContainer.firstChild; 

    WinJS.UI.process(templateElement);

    var container = document.createElement("div");
    templateElement.winControl.render(item.data, container);
    return container;
});)

}

WinJS.Utilities.markSupportedForProcessing(self.selectTemplate);

WinJS.Namespace.define("TemplateSelector", {

    template: self.selectTemplate
});

1 个答案:

答案 0 :(得分:0)

我可以在代码中看到一个错误。但不确定这是否是唯一的问题。承诺需要被束缚。 winjs.ui.processAll返回一个promise。

itemTemplatePromise.then(function (itemTemplateLoaded) {

  var templateContainer = document.createElement("div");
  templateContainer.innerHTML = itemTemplateLoaded;
  templateElement = templateContainer.firstChild; 

  return WinJS.UI.processAll(templateElement);
}).then(function onprocessall()
{
    var container = document.createElement("div");
    templateElement.winControl.render(item.data, container);
    return container;
});