2

私は knockout.js を初めて使用し、Web ページの例を試しました。私の仕事に関連する例は、ブラウザとサーバーの間でリストのエントリがやり取りされるAjax todo リストです。

コメントリストのあるウェブサイトを構築しようとしています。

<ul data-bind="foreach: comments, visible: comments().length > 0">
    <li>
        <input data-bind="value: title, disable: isDone" />
        <a href="#" data-bind="click: $parent.removeComment">Delete</a>
    </li>
</ul>

サイトをロードするときに、observableArray オブジェクトを使用して、ノックアウトで ul-list 全体を作成することができます。ただし、JavaScript と ajax を使用せずにサイトを機能させたい (検索エンジンがサイトをインデックス化し、JavaScript を使用しないユーザーがサイトを使用できるようにするため)。したがって、既存のコメントを html としてサーバーからサイトをロードできるとよいでしょう。しかし、knockout.js が既存のコメントを新しく追加されたコメントと同じように処理するようにしたいと考えています。つまり、サーバーから html としてロードされたものであっても、すべての li 要素を comments-observableArray の一部にしたいと考えています。これは可能ですか?そしてどうやって?

4

2 に答える 2

1

いいえ、ノックアウト データ ソースと html を「混在」させることはできません。ただし、HTML を表示してから、ノックアウトを使用して動的コメントを表示できます。

Ajax のコールバック関数で、observableArray のコメントに新しい項目を追加できます。

初期バインディング

var vm = {
    comments : ko.observableArray([...])
};
ko.applyBindings(vm);

サーバーコールバック関数

var ajaxCallback = function(items){
    ko.utils.arrayForEach(items,  function(item){
        vm.comments.push(item);
    });    
}

クライアント側でコメント配列を初期化するスクリプトをサーバー上で生成できるかもしれません。

お役に立てば幸いです。

于 2013-07-17T09:30:22.697 に答える