1

我希望它出现在 DOM 中:

<body>
  <ul>
    <li>This is 1</li>
    <li>This is 2</li>
    <li>This is 3</li>
    <li>This is 4</li>
  </ul>
</body>

ulparentView并且lisubView。这就是我希望它的工作方式:

  1. parentView将以简单的 for() 循环为例进行初始化和创建子视图。

  2. 我不想在 addSub 中渲染每个subView创建,所以我只返回subView的jQuery 对象。$el

  3. parentView将保存这些$el并将它们合并到单个 jQuery 对象中,例如$new. 我为此使用 jQuery 函数.add()

  4. 然后,一旦循环完成,将 渲染$new到 DOM。所以一切都必须发生在 DOM 之外。

现在我的代码不起作用。它没有显示任何东西。我做错了什么?

http://jsfiddle.net/nTTbH/

4

1 回答 1

2

这里有几件事是不正确的。在您的 ParentView 中,您的代码:

    for (i=1;i<=4;i++) {
        $new.add(this.addSub(i));
    }

    this.$el.html($new.html());

$new.add(this.addSub(i))由于 .add() 工作方式的性质,未保存。您需要将此行更改为类似$new = $new.add(this.addSub(i)); 让它工作。

我建议完全避免使用这种方法,并看看使用 .append 在每次迭代中将你的 li 添加到你的 ul 中。

例如this.$el.append(this.addSub(i))this.$el.append(this.addSub(i).render().el)

同样,您对 .add() 的使用会导致您的 .add() $el.html($new.html()),但这是不必要的,因为 $new 本身将是您的 4 li 元素,因此您只需调用 $new 本身this.$el.html($new);

最后,你需要在你的父视图中设置你的“根”元素,删除tagName: ul它应该是el: ul因为它需要一些东西来设置你的子视图

这是您在此处工作的代码的更新 jsfiddle:http: //jsfiddle.net/SQFwg/

如果您从中拿走任何东西,那就不要使用 .add() 而是使用 .append() !

于 2012-10-20T08:20:53.290 回答