3

ember-leafletライブラリとポップアップの正しい使い方について質問があります。

ember-leafletWeb サイトの次の例では、ライブラリを使用してマーカーとリンクされたポップアップを追加しています。また、コンテンツ バインディングを介してポップアップのコンテンツを追加する方法も示しています。

RadMarkersApp = Ember.Application.create();
RadMarkersApp.MarkerLayer =
  EmberLeaflet.MarkerLayer.extend(
    EmberLeaflet.DraggableMixin,
    EmberLeaflet.PopupMixin, {
  popupContentBinding: 'content.title'
});

RadMarkersApp.MarkerCollectionLayer =
  EmberLeaflet.MarkerCollectionLayer.extend({
    content: [{
      location: L.latLng(40.7127, -74.0060),
      title: 'City Hall'}],
    itemLayerClass: RadMarkersApp.MarkerLayer
  });

RadMarkersApp.IndexView =
  EmberLeaflet.MapView.extend({
    childLayers: [
      EmberLeaflet.DefaultTileLayer,
      RadMarkersApp.MarkerCollectionLayer]});

popupContentここで、プロパティのビューまたはハンドルバー テンプレートを使用できるようにしたいと考えています。誰かがこれを実装する方法を知っていますか? このシナリオのベスト プラクティスはありますか?

私の最初のアプローチ:

App.MarkerLayer =
  EmberLeaflet.MarkerLayer.extend(
    EmberLeaflet.PopupMixin, {

    popupContent: function() {
      // Render view (how to get?) or handlebars template
      return Ember.TEMPLATES['popup-content'](this.get('content'))
    }.property()
  });

これにより、次のエラーが発生します。

Uncaught TypeError: Cannot call method 'push' of undefined 

誰かが助けてくれることを願っています。

4

1 に答える 1

3

私は、ドキュメントで役立つ機能を調べることができない少しばかです。

ちょっとしたハックとEmber.View#createElement次の助けを借りて、これを修正できました。

App.MarkerLayer = EmberLeaflet.MarkerLayer.extend(EmberLeaflet.PopupMixin, {
  popupContent: function() {
    view = this.view = this._parentLayer.createChildView('map-popup');
    view.set('context', this.get('content'));
    Ember.View.states.inDOM.enter(view)
    view.createElement();

    return view.get('element');
  }.property()
});

これが他の人に役立つことを願っています。

于 2013-10-02T17:26:33.947 に答える