1

我为我的客户端 Javascript 使用了 MVC 的实现。

我有一个Table包含模型数组的Row模型。每个模型都有对应的视图TableViewRowView.

var Table = function() {
   this.rows = [];
}

将 Table 渲染到 DOM 的责任在于TableView类型。这接受一个Table模型作为构造函数参数。

为了呈现自己,它遍历“实例变量”Row中的 s,为每个新的 a,传入当前行模型并在视图上调用 render,如下所示:rowsRowView

var TableView = function(tableModel) {
    this.$el = $("#myTable");
    this.model = tableModel;

    this.render = function() {
      _.each(this.model.rows, function(row) { this.$el.append(new RowView(row).render()); });
    }
}

这行得通,但感觉不对,因为关于RowView被渲染的确切类型的知识存在于表视图中。如果我想要另一种类型的RowView- 说RowView2渲染略有不同,那么我需要在TableView渲染函数中显式条件。

我如何更改此实现以启用表行的多态呈现 - 或者我的实现完全错误并且有更好的方法?

4

2 回答 2

1

不确定您是否研究过 MVC 库,但这里有一个来自 Peter Michaux 的不错的库:https ://github.com/petermichaux/maria

于 2012-07-20T11:24:08.290 回答
1

您可以在RowView实例之外构造TableView实例并将它们传递给列表中的构造函数,而不是TableModel您当前发送的。这样,所有TableView关心的就是将元素附加到 DOM 并且可以这样做而不管Row.

于 2012-07-20T10:20:07.977 回答