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 ルーターを使用しており、すべてのパーツを「Three」という名前で同期しています。配列をビューに直接配置すると、すべてが機能します。

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 に答える