2015-04-04 2 views
0

Я написал вид:ember.js есть функция просмотра в замечает свойство контроллера

export default Ember.View.extend({ 
    select: null, 
    modify: null, 

    createSelect: function() { 
    return new ol.interaction.Select(); 
    }, 

    onMapCreated: function() { 
    this.select = this.createSelect(); 
    this.modify = this.createModify(); 
    }, 

    init: function() { 
    this._super(); 
    this.get('controller').addObserver('olMap', this.onMapCreated); 
    }, 
}); 

Вид добавляется в шаблоне, связанный с контроллером, который имеет свойство olMap. Мне нужно подождать olMap Свойство, которое будет создано, прежде чем делать некоторую работу на мой взгляд.

Код выше вид работы, за исключением того, что это ссылка в onMapCreated функция экземпляра контроллера, а не экземпляр представления.

Я совершенно уверен, что делаю что-то не так в дизайне моего приложения. Я хотел бы разделить проблемы и получить чертеж за пределами основного контроллера. Должен ли я использовать компонент? Не уверен, потому что он не будет использоваться повторно ...

Я хотел бы иметь некоторые направления здесь.

ответ

0

Вот что я закончил с:

Моя установка:

Ember: 1.10.0

Ember данных: 1.0.0-beta.16

jQuery: 1.11.2

Структура

Каталог:

  • контроллеры:
    • map.js
    • карта-draw.js
  • шаблоны
    • map.hbs
    • карта-draw.hbs
  • просмотров
    • map.js
    • карта-draw.js

в шаблон шаблоны/карты.JS Я использую визуализации помощника, как это:

{{render "mapDraw" mapDraw}} 

визуализатор использует контроллер контроллеры/МАП-draw.js и вид взгляды/ПДС-draw.js

содержание вид -карту draw.js:

export default Ember.View.extend({ 
    templateName: "mapDraw", 
    classNames: ["map-draw"] 
}); 

в контроллере карте-draw.js Я связываю map.js контроллер.

export default Ember.Controller.extend({  
    needs: ['map'], 
    olMap: null, 
    //...// 
    init: function() { 
    this._super(); 
    this.get('controllers.map').addObserver('olMap', this, function(sender) { 
     this.set('olMap', sender.get('olMap')); 
    }); 
    } 
    //...// 
}); 
1

После прочтения руководства в разделе API я придумал решение. Я отправляю его здесь, кому-то это нужно. Фактически, все, что мне нужно было сделать, это добавить параметр в метод addObserver, чтобы изменить контекст.

export default Ember.View.extend({ 
    select: null, 
    modify: null, 

    createSelect: function() { 
    return new ol.interaction.Select(); 
    }, 

    onMapCreated: function() { 
    this.select = this.createSelect(); 
    this.modify = this.createModify(); 
    }, 

    init: function() { 
    this._super(); 
    this.get('controller').addObserver('olMap', this, this.onMapCreated); 
    }, 
}); 
+0

Я нашел что-то более чистое, я отправлю ответ с этим позже –