4

私はこれに対する答えをあちこちで検索しましたが、おそらく答えはそれだけです-それは存在しませんが、誰かが魔法を持っていることを願っています.

ノックアウトを使用して、ページに複数のフォームをバインドしています。これはすべて素晴らしく機能します。ただし、これらのフォームを PDF コンバーターに送信するのは難しいことがわかりました。

レンダリングされた HTML は依然として Knockout-y に見えます。$('body').html() でレンダリングされた DOM を取得しようとしましたが、まだ data-bind 属性を持つ HTML タグを取得しています。PDFコンバーターに渡すために最終的にレンダリングされた純粋なHTMLを取得する方法はありますか?

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 バインディング アクセスを許可するようノックアウトに指示する必要があります

于 2012-09-05T12:29:30.853 に答える