Javascript客户端MVC渲染责任

时间:2012-07-20 09:42:28

标签: javascript model-view-controller

我将MVC的实现用于我的客户端Javascript。

我有一个Table模型,其中包含Row模型数组。每个模型都有相应的视图TableViewRowView

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

将表呈现给DOM的责任在于TableView类型。这接受Table模型作为构造函数参数。

为了渲染自身,它迭代Row“实例变量中的rows”,为每个变量添加RowView,传入当前行模型并调用渲染像这样看:

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渲染函数中的显式条件。

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

2 个答案:

答案 0 :(得分:1)

您可以在RowView实例之外构建TableView个实例,并将它们传递到列表中的构造函数中,而不是您当前发送的TableModel。这样所有TableView关心的是将元素附加到DOM,并且无论Row的“类型”如何都可以这样做。

答案 1 :(得分:1)

不确定你是否已经研究过MVC库,但这是Peter Michaux的一个很好的:https://github.com/petermichaux/maria