2012-07-20 21 views
1

我使用MVC的實現爲我的客戶端JavaScript。Javascript客戶端MVC渲染責任

我有一個Table模型,其中包含一個模型的數組。每個型號都有相應的視圖TableViewRowView

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

將表格渲染到DOM的責任駐留在TableView類型中。這接受Table模型作爲構造函數參數。

要渲染本身它遍歷的 S IN的rows「實例變量」,newing爲每個一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渲染函數中使用明確的條件。

如何更改此實現以啓用表格行的多態呈現 - 或者是我的實現完全錯誤,並且有更好的方法?

回答

1

您可以在TableView實例外構造您的RowView實例,並將它們傳遞到列表中的構造函數中,而不是您當前發送的TableModel。這樣所有TableView關心的是將元素附加到DOM,並且可以這樣做,無論的「類型」如何。

相關問題