可以绑定虚拟元素而不绑定到容器?

时间:2014-04-02 20:00:05

标签: jquery-mobile knockout.js

在当前版本的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/

这可行吗?

1 个答案:

答案 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;