4

我到处寻找答案,也许答案就是——它不存在,但希望有人有一些魔力。

我正在使用 Knockout 在一个页面上绑定多个表单。这一切都非常有效。然而,尝试将这些表单发送到 PDF 转换器已被证明是一项挑战。

呈现的 HTML 仍然显示为 Knockout-y。我尝试使用 $('body').html() 获取呈现的 DOM,但我仍然获得具有数据绑定属性的 HTML 标记。有没有办法让最终呈现的纯 HTML 传递给 PDF 转换器?

4

1 回答 1

2

您可以在 afterRender 事件中将渲染的元素添加到 DOM 之前获取它们。有关更多信息,请参阅http://knockoutjs.com/documentation/template-binding.html#note_3_using_afterrender_afteradd_and_beforeremove

如果您需要访问最终呈现的元素,请创建自定义绑定 ( http://jsfiddle.net/nE7kK/ ):

<body data-bind="getRenderedElements: viewModel">
    <ul data-bind="foreach: viewModel">
        <li data-bind="text: name"></li>
    </ul>
</body>

viewModel = ko.observableArray([
    { name: "Bungle", type: "Bear" },
    { name: "George", type: "Hippo" },
    { name: "Zippy", type: "Unknown" }
]);

ko.bindingHandlers.getRenderedElements = {
   update: function (element, valueAccessor) {
       // use timeout so browser has time to render the elements
       setTimeout(function() {
            var html = $(element).html();
            alert(html);
       }, 1000);
   }
};

ko.applyBindings(viewModel);

注意:如果您使用虚拟元素,您应该告诉敲除允许 getRenderedElements 绑定访问这些元素,请参阅:http: //knockoutjs.com/documentation/custom-bindings-for-virtual-elements.html

于 2012-09-05T12:29:30.853 回答