2013-11-22 2 views
0

Я застрял в этой проблеме, где я не могу присвоить новое значение созданной переменной объекта. Смотрите ниже:Установить переменную объекта изнутри метод

// Vesselposition class 
function vessel(name,ajaxName,dataUrl,pointLimit,polylineColor,iconUrl) { 
    this.name = name; 
    this.ajaxName = ajaxName; 
    this.dataUrl = dataUrl; 
    this.pointLimit = pointLimit; 
    this.polylineColor = polylineColor; 
    this.iconUrl = iconUrl; 

// Global variables 
this.lat=0; 
this.lng=0; 
this.latlng; 
this.dateTime, this.vesselIcon, this.marker, this.polyline, this.localTemp, this.localWindSpeed, this.localWindDir; 
this.countryName, this.countryCode, this.localTime, this.localSunrise, this.localSunset, this.countryFlag; 
this.localTemp, this.localWindSpeed, this.localWindDir, this.myOptions, this.ib; 

// Function gets position data 
this.getData = function() { 
    $.when(
     $.getJSON(this.dataUrl, { vessel: this.ajaxName, limit: this.pointLimit }) 

    ).done(function (data){ 
     this.path = []; 
     // Create vessel icon for marker 
     this.vesselIcon = new google.maps.MarkerImage(this.iconUrl, 
      // This marker is 60 pixels wide by 58 pixels tall. 
      new google.maps.Size(60, 58), 
      // The origin for this image is 0,0. 
      new google.maps.Point(0,0), 
      // The anchor for this image is centered at 30,29 pixels. 
      new google.maps.Point(30, 29) 
     ); 

     if (data.markers.length < 1) { 
      document.getElementById("map_canvas").innerHTML = "<h2>There was a problem obtaining vessel data, wait a couple of minutes and refresh your browser!</h2>"; 
     } else { 
      for(i=0;i<data.markers.length;i++) { 
       // Assign lat,lng, id, dateTime and heading 
       this.lat = data.markers[i].marker.lat; 
       this.lng = data.markers[i].marker.lng; 

То, что я хочу сделать, чтобы назначить this.lat и this.lng координатные значения внутри для петли. Позже эти значения должны быть переданы методу getData.

Пожалуйста, помогите ребятам! Застрял на этом в течение 3 часов, ища в Интернете!

ответ

0

Попробуйте это:

//keep a reference to this 
var self = this; 

// Function gets position data 
this.getData = function() { 
.... 

    //use self here 
    self.lat= 
+0

Не повезло, ничто не изменилось после попытки вашего предложения. Спасибо в любом случае! :) – Joar

+0

Никто больше не знает? – Joar

+0

Я не понимаю, он должен работать. Где вы положили «var self = this» – Andrew

0

Я нашел решение. С помощью функции прокси-сервера jQuery. Я получил его для работы.

// Function gets position data 
this.getData = function() { 
    $.when(
    $.getJSON(this.dataUrl, { vessel: this.ajaxName, limit: this.pointLimit }) 

    ).done($.proxy(function (data){ 
    this.path = []; 

    ),this} 

Используя те же переменные класса, как первый, предусмотренные .. ключ должен использовать метод $ .proxy в функции .done с областью «этого».

Смежные вопросы