我将MVC的实现用于我的客户端Javascript。
我有一个Table
模型,其中包含Row
模型数组。每个模型都有相应的视图TableView
和RowView
。
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
渲染函数中的显式条件。
我如何更改此实现以启用表行的多态呈现 - 或者我的实现是完全错误的并且有更好的方法?
答案 0 :(得分:1)
您可以在RowView
实例之外构建TableView
个实例,并将它们传递到列表中的构造函数中,而不是您当前发送的TableModel
。这样所有TableView
关心的是将元素附加到DOM,并且无论Row
的“类型”如何都可以这样做。
答案 1 :(得分:1)
不确定你是否已经研究过MVC库,但这是Peter Michaux的一个很好的:https://github.com/petermichaux/maria