0

コメント用の Rails 3Acts_As_Nestedモデルがあり、次のフィールドがあります。

  • ID
  • 親ID
  • リフト
  • rgt
  • コンテンツ

Rails では、次のようなものを使用して、ネストされたコメントのリストを簡単にレンダリングでき.parent .childrenます。

しかし、今は KnockoutJS を使用して、ネストされたコメントを jQuery テンプレート経由で出力したいと考えています。jQuery Template + KnockoutJS でネストを出力するにはどうすればよいですか?

4

1 に答える 1

0

これをKOフォーラムに投稿しましたが、質問がここにあるため、ここにも追加しました.

これを行う良い方法は、テンプレートを再帰的に呼び出すことです。構造がネストされている場合は、毎回子をテンプレートに渡すことができます。構造がフラットな場合は、テンプレートに渡されるアイテムをフィルタリングする必要があります。

サンプルはこちら: http://jsfiddle.net/rniemeyer/Xydth/

フラット構造の場合、次のようになります。

<ul data-bind="template: { name: 'comment', foreach: viewModel.getChildren(0) }"></ul>

<script id="comment" type="text/html">
    <li>
       <span data-bind="text: content"></span>   
        <ul data-bind="template: { name: 'comment', foreach: viewModel.getChildren($data.id) }"></ul>
    </li>
</script>

<script type="text/javascript">
function comment(id, parentId, content) {
    this.id = id;
    this.parentId = parentId;
    this.content = ko.observable(content);
}

var viewModel = {
    comments: ko.observableArray([
        new comment(1, 0, "one content"),
        new comment(2, 1, "two content"),
        new comment(3, 0, "three content"),
        new comment(4, 0, "four content"),
        new comment(5, 4, "five content"),
        new comment(6, 4, "six content"),
        new comment(7, 6, "secent content"),
        new comment(8, 0, "eight content")
        ]),
    getChildren: function(parentId) {
        return ko.utils.arrayFilter(this.comments(), function(comment) {
            return comment.parentId == parentId;
        });
    }
};

ko.applyBindings(viewModel);
</script>
于 2011-02-25T06:05:42.410 に答える