0

ajaxリクエストを介してデータを取得するためにサーバーを呼び出していますが、promiseを使用しています。テンプレートはデータが返されるとすぐに自動的に更新されますが、コントローラー内のデータにアクセスするのは不運です。データがいつそこにあるのかわからないからです。

解決するには、コントローラーで追加の ajax 呼び出しを行って同じデータを取得できますが、それは見苦しく感じます。コントローラーのデータにアクセスするタイミングを知る良い方法はありますか? 回避策として、データを必要とする関数を呼び出そうとしましたdidInsertElementが、解決しませんでした。

App.ActiveDataSet = Ember.Object.extend({
  progress: 0
});

App.ActiveDataSet.reopenClass({
  findAll: function(project_id) {
    var result = [];
    $.ajax({
      url: '/active_data_sets.json',
      type: 'GET',
      data: {'project_id': project_id}
    }).then(function(response) {
        response.active_data_sets.forEach(function(newset) {
          result.addObject(App.ActiveDataSet.create(newset));
        });
    });

    return result;
  }
});

App.MapviewShowRoute = Ember.Route.extend({
  setupController: function(controller, model) {
    this.controllerFor('activedatasetIndex').set('content', App.ActiveDataSet.findAll(model.id));
  }
});

App.MapviewShowController = Ember.ObjectController.extend({
  needs: ['activedatasetIndex'],

  content: null,
  dataSets: [],

  createDataSets: function() {

    // create the datasets
    for (var counter = 0; counter < this.get('controllers.activedatasetIndex.content').length; counter++) {
      alert(dataSets[counter].ds.name);
    }
  }

});

App.MapviewShowView = Ember.View.extend({
  map: null,

  didInsertElement: function() {
    var map = null;

    var myOptions = {
      zoom: 8,
      center: new google.maps.LatLng(52.368892, 4.875183),
      mapTypeControl: true,
      mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
      },
      navigationControl: true,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(this.$('#map_canvas').get(0), myOptions);


    this.set('map', map); //save for future updations

    var h = $(window).height(),
        offsetTop = 60; // Calculate the top offset

    $('#map_canvas').css('height', (h - offsetTop));

    // get the datasets
    this.controller.createDataSets();
  }
});
4

1 に答える 1