1

私はいくつかの見解を持っており、それぞれのモデルにしっかりと結びついています:

image.handlerbars:

URL:{{view Ember.TextField 
  valueBinding="EvEditor.imageModel.imgUrl" 
}}<br/>

text.handlerbars:

{{view Ember.TextField 
 valueBinding="EvEditor.titleModel.text" 
}}<br/>

ここで、いくつかの画像とテキストブロックを含む複合ビューを作成したいと思います。

var container = Ember.ContainerView.create({
    childViews: ['firstView', 'secondView', 'thirdView', 'fourthView'],
    firstView: App.TextView,
    secondView: App.TextView,
    thirdView: App.ImageView,
    fourthView: App.ImageView
});

現在、現状では、すべてのImageViewとTextViewには、それぞれに割り当てられたImageModel / TextViewの異なるインスタンスではなく、同じデータが含まれています。

この種のものを設計するための最良の方法は何ですか?ビューを作成するコードで、各ビューに渡す必要のあるプロパティも認識したくないのですが、たとえば、そうしますか?

理想的には、次のような擬似コードを記述します。

var container = Ember.ContainerView.create({
    childViews: ['firstView', 'secondView', 'thirdView', 'fourthView'],
    firstView: {view=App.TextView, model=App.EmberObjectincomingData[0]},
    secondView: {view=App.TextView, model=App.EmberObjectincomingData[1]},
    thirdView: {view=App.ImageView, model=App.EmberObjectincomingData[2]},
    fourthView: {view=App.ImageView model=App.EmberObjectincomingData[3]},
});
4

1 に答える 1

0

https://stackoverflow.com/a/10225570/466772のようなものを使用してから、CollectionViewに追加します。

for( var i=0;i<data.req.length;i++ ){
   var type=data.req[i],model={};
    if ( type == 'image'){
      model=imageModel.fromChangeFormat( data.data[i] );
    }else if (type.indexOf('title') >-1 || type.indexOf('text') > -1 ){
      data.req[i]='text';
      model=Ember.Object.create({                   
        text    : data.data[i]
       });
    }
    window.App.controller.addItem( data.req[i]+'View', model );
}

ここで、window.App.controllerは

controller = Em.ArrayProxy.create({
    content: [],
    addItem: function(itemType,data) {
        this.pushObject(App.Item.create({
            itemType: itemType,
            data:data
        }))
    }
});

次に、各ビューテンプレートはview.content.data.fooを参照できます。ここで、fooはそのビューの正しいモデルのプロパティです。

モデルが各アイテムのビューにカスタマーオブザーバーまたはイベントハンドラーをアタッチする必要がある場合は、ビューの文字列を返す前にMyViewでそれを行うことができます(このコンテキストはビューです)。

于 2012-08-09T15:59:37.687 に答える