2

如果有人能用这个让我摆脱痛苦,我将不胜感激,让我发疯,我知道这将是一件非常简单的事情。

我有一个数组:

数据

var test = [{"name":"Kober Ltd","town":"Bradford","type":"Z1CA","number":3650645629},
{"name":"Branston Ltd.","town":"Lincoln","type":"Z1CA","number":3650645630}]

我想将此信息呈现为collectionView中的子元素:

集合视图

App.ThreeView = Ember.CollectionView.extend({
  itemViewClass: Ember.View.extend({    
      click: function(){
        alert('hello')
       },   
    classNames: ['element','foobar'],
    templateName: 'foo'
  })
})

这是我的控制器:

控制器

App.ThreeController = Ember.ArrayController.extend({
content: [],
  init: function(){
    var me = this;
    $.each(test,function(k,v){
        var t = App.ThreeModel.create({
            name : v.name,
            town: v.town,
            type: v.type,
            number: v.number
        }) 
        me.addObject( t )
    })
    console.log( me.content )
  }
})

模板:

    <script type="text/x-handlebars" data-template-name="application">
        {{outlet}}
    </script>

    <script type="text/x-handlebars" data-template-name="three">
    </script>

    <script type="text/x-handlebars" data-template-name="foo">
        <div class="symbol"> {{ view.content.type }} </div>
        <div class="number"> {{ view.content.number }} </div>
        <div class="name"> {{ view.content.name }} </div>
        <div class="town"> {{ view.content.town }} </div>
    </script>  

我正在使用最新的 Ember so...V2 路由器,它使用“三”名称同步所有部分。如果我将数组直接放入视图中,每个都可以工作:

App.ThreeView = Ember.CollectionView.extend({
  content: test, // manually added a pure array into view content
  itemViewClass: Ember.View.extend({    
      click: function(){
          alert('hello')
      },    
      classNames: ['element','foobar'],
      templateName: 'foo'
  })
})

但是当我尝试使用 Ember.js 对象“正确”执行此操作时,我没有得到任何渲染视图(除了一个空的应用程序视图)。

我已经尝试过变通方法,比如从视图添加一个“contentBinding”到控制器只是为了看看我是否可以强制连接但仍然没有。当我使用 Three.js 获取渲染内容并进一步操作时,通过容器渲染视图很重要。

所以,总结一下:我可以在视图中呈现纯数组,但控制器没有传递任何内容。顺便说一句,控制器肯定是建立的,因为我可以在 init 上控制台记录它的内容。如果我更改视图名称,控制器不会被实例化,所以我知道命名空间正在工作。

提前致谢!

4

1 回答 1

1

我不确定要接受整个问题,但是现在,当您定义控制器时,在 init() 函数中,首先不要忘记调用 this._super() (它将通过类层次结构并调用构造函数)。也许这只是缺少的东西。

编辑:似乎对于新路由器,将视图定义为 CollectionView 不起作用。所以我用普通的 Ember.View 替换它,并在模板中使用 {each} 助手。

<script type="text/x-handlebars" data-template-name="three">
  {{each controller itemViewClass="App.FooView" tagName="ul"}} 
</script>

这是一个最小的工作小提琴:http: //jsfiddle.net/Sly7/qCdAY/14/

编辑2:

通过重新阅读问题,并看到您尝试将 CollectionView 内容的属性绑定到控制器,我尝试了它,因为它工作正常:)

http://jsfiddle.net/Sly7/qCdAY/15/

于 2013-01-12T12:14:43.157 回答