2012-07-06 110 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