在当前版本的jQuery Mobile中,似乎有必要保留所有data-role =" page"一个层面上的元素(至少当一个层面想要建立它们之间的链接时)。由于我使用knockout来动态生成页面,因此我需要直接绑定虚拟元素,例如在
<div data-role="page" id="page1"><h1 data-bind="text: name"></h1></div>
<!-- ko text: name --><!-- /ko -->
我想将一个模型A绑定到page1,将一个模型B绑定到虚拟元素(这是一个模板:实际应用程序中的foreach绑定)。更详细的小提琴:http://jsfiddle.net/timvdh/t3Cyd/3/
这可行吗?
答案 0 :(得分:0)
有限的信息我会说你有3个选择:
(1)将虚拟元素包装在另一个虚拟元素或div中,并使用with binding。
<!-- ko with: modelForPage2 -->
<!-- ko text: name --><!-- /ko -->
<!-- /ko -->
(2)在虚拟元素中使用模板绑定,并使用data属性提供新的上下文。
<!-- ko template: { name: 'page2_template', data: modelForPage2 } --><!-- /ko -->
(3)创建自己的自定义绑定,支持虚拟元素并将绑定应用于后代。这只是引导您朝着正确方向前进的一个例子:
ko.bindingHandlers.bindModel = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel, context) {
var newContext = new ModelA();
ko.applyBindingsToDescendants(newContext, element);
return { controlsDescendantBindings: true };
}
};
ko.virtualElements.allowedBindings.bindModel = true;