2012-08-30 33 views
4

标题可能听起来很蠢,考虑下面的代码不想使用任何标签(包括默认div标签)在Ember.Collection查看

我的手把文件

<table id="main-table"> 
    <tr> 
    <td> 
     <h1>Some Text</h1> 
    </td> 
    {{#collection myCollectionView}} 
    <td> 
     <table> 
     <tr><td>{{view.someProperty}}</td></tr> 
     </table> 
    </td>  
    {{/collection}} 
    </tr> 
</table> 

我查看文件

myCollectionView = Ember.CollectionView.extend({ 
    contentBinding: "myController.someArray", 
    //someArray has say 4 elements 
    itemViewClass: Ember.View.extend() 
}) 

我希望它渲染#主表中的4个表,它,而不是使他们的#main-外因为它将我的itemViewClass包含在默认的div标记中。我只能更改tagName属性,但不能将其设置为零我想,这个问题的任何破解?

The JSFiddle

在响应于第一答案 与{{每个}}是,我使用如下的EditableField问题:
(只是要清晰,可编辑的字段是其中一个改变一个div上双击文本框&回焦点了div标签,简单的小工具使用烬)内置

更新把手文件

<table id="main-table"> 
    <tr> 
    <td> 
     <h1>Some Text</h1> 
    </td> 
    {{#collection myCollectionView}} 
    <td> 
     <table> 
     <tr><td>{{view.myEditableField valueBinding="view.content"}}</td></tr> 
     </table> 
    </td>  
    {{/collection}} 
    </tr> 
</table> 

更新视图文件

myCollectionView = Ember.CollectionView.extend({ 
    contentBinding: "myController.someArray", 
    //someArray has say 4 elements 
    itemViewClass: Ember.View.extend({ 
    alertFunc: function(){ 
     alert("content did change"); 
    }.observes('content') 
    }) 
}) 

我想只要在editableField的一个值变为观察员开火,这样我就可以在数据库中更新我的记录。我们可以使用{{each}}帮手完成这件事吗?另外,arrayContentDidChange只会在数组长度发生变化时触发

+0

?也许你可以用一个简单的'

+0

来代替它。你仍然可以访问子视图/父视图,就像这个JSFiddle一样:http://jsfiddle.net/ZsrWe /。如果它仍然不够,也许你将不得不使用'Ember.ContainerView'。但个人而言,我认为您的模板并非真正干净,例如,“CollectionView”应该更多地用作''或直接用作'

'。 – louiscoquio

+0

@ sly7_7:[jsFiddle for Editable Field](http://jsfiddle.net/ZsrWe/3/) –

回答

4

AFAIK,在DOM中没有“真实存在”的情况下不能有Ember.View,但是如果您不想添加一个帮助器,则可以使用{{each}}帮助器视图充当一个容器(这里是一个Ember.CollectionView)。

设置tagNamenull不起作用see Ember.View source code

模板:

<script type="text/x-handlebars"> 
    <table id="main-table"> 
    <tr> 
    <td> 
     <h1>Some Text</h1> 
    </td> 
    {{#each App.content}} 
     <td> 
     <table><tr><td>{{name}}</td></tr></table> 
     </td> 
    {{/each}} 
    </tr> 
</table> 
</script>​ 

代码:

App = Ember.Application.create(); 
App.content = [{name: "foo"}, {name: "bar"}, {name: "baz"}]; 

this JSFiddle

+1

Fine louis,+1。感谢您的时间帮助人们:) –

+0

@louiscoquio:感谢您的回复,但请参阅最新的问题,对不起,我没有在 –

8

这是可能的,你可以发布myEditableFieldView的代码来做到这一点的灰烬查看

App.MyView = Ember.View.extend({ 
    tagName: '' 
}); 
+1

之前添加这个细节也是错误的作品。但不是空的。我认为这是因为这个问题最初是被问到的。 –

+2

'tagName:'''在更改路线时会导致错误。我的观点在路线改变时不会被破坏。 (ember 1.2) – guleria

+1

在烬1.9.1 - tagName:''的作品,但将其设置为false不。 – Nathan