不想在Ember.Collection视图中使用任何标记(包括默认的div标记)

时间:2012-08-30 09:38:51

标签: ember.js handlebars.js

标题可能听起来很愚蠢,请考虑以下代码

我的把手档案

<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()
})

我希望它在#main-table中呈现4个表,而是将它们呈现在#main-table之外,因为它将itemViewClass包含在默认的div标记内。我只能更改tagName属性但不能将其设置为nil我猜,这个问题有什么问题吗?

The JSFiddle

回答第一个答案 {{each}}的问题在于,我使用的是EditableField,如下所示:
(只是为了听起来清晰,可编辑的字段是在双击时将div更改为文本字段并在焦点上返回到div标签,使用ember构建的简单小部件)

更新了Handlebars文件

<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

2 个答案:

答案 0 :(得分:8)

可以在Ember View中执行此操作

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

答案 1 :(得分:4)

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

tagName设置为null不起作用,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