2012-07-06 147 views
0

我們在我的團隊的項目之一使用Backbone.js的,這是我第一次使用它。骨幹:渲染語法

我見過很多次這樣的代碼(它的CoffeeScript的,但很清楚我的想法。@意味着this.

clients_view = new Homespa.Views.Orders.Clients.SectionView(collection: @options.clients) 
@$("#clients-section").html(clients_view.render().el) 

clients_search_view = new Homespa.Views.Orders.Clients.SearchView 
@$("#clients_search_modal").html(clients_search_view.render().el) 

是不是有更好的辦法來做到這一點?我期望在我的觀點上調用render,然後一切都很好,我不應該得到html並手動添加/替換它。

感謝您的時間!

+0

追加本身DOM將需要外部世界的知識,將打破其encpsulation視圖。你可以給一個'.renderTo'方法,然後'client_search_view.renderto(「#clients_search_modal」)',但視圖本身不應該知道'「#clients_search_modal' – Esailija 2012-07-06 08:51:56

+0

哦,所以這是它的工作原理與骨幹?我想有用'tagName'和其他屬性打這樣做的方式,但我想我錯了 – ksol 2012-07-06 08:58:22

+0

這不是骨幹具體,你不能只是創建元素,並期望他們出現,他們需要被附加到元素的頁面已經存在於頁面上,我的意思是一個視圖只應該知道它擁有的元素,所以代碼已經是正確的IMO。 – Esailija 2012-07-06 09:01:34

回答

1

自動追加本身的頁面將需要以具有外部世界的知識,內容的知識 ,它並沒有自己的觀點。不是很好。

而且這不是骨幹具體,你不能只創建一個元素,並期望它出現的地方。它總是需要先在頁面上插入 。

var a = document.createElement("div"); //Don't expect this to appear as a child of #footer or something 
document.getElementById("footer").appendChild(a) //Now it is, but we needed to know about #footer. 

在最好的情況,你可以通過製作方法像.renderTo,然後縮短管道一點點:

someView.renderTo("#clients-section"); //Would call .render and append the views .el to "#clients-section" without the view having to know about it 
+0

你說的是有道理的,也是你的例子。但是,骨幹觀點能夠知道在哪裏呈現自己,而不是通過猜測,而是根據其屬性,即使它已經超出了它的世界。感謝您的詳細信息儘管如此, – ksol 2012-07-06 09:20:01

+0

@ksol那麼,那很容易讓你自己。只要讓你的方法讀取屬性並進行追加。 – Esailija 2012-07-06 09:22:30