2013-10-27 43 views
2

鑑於以下JS,我如何設置PlateCheck對象的message屬性?JavaScript Promise和這個關鍵字

var plateCheck = { 
     plateNumber: '', 
     message: '', 
     alertClass: '', 
     checkPlate: function (plateNumber) { 
      PlateCheckService.checkPlate(plateNumber).then(function (response) { 
       var data = response.data; 

       if (data.VehicleAtl !== null) { 
        this.message = "Hot!"; 
        this.alertClass = 'alert-danger'; 
       } else { 
        this.message = "Plate #" + data.PlateNumber + " is clean."; 
        this.alertClass = 'alert-success'; 
       } 
      }); 
     } 
    }; 

編輯

PlateCheckService.checkPlate(plateNumber)返回一個承諾......

+0

只是爲了澄清,你希望根據'checkPlate'函數的響應設置'message'屬性嗎? –

+0

@CyrilPangilinan - 是的。還想了解如何將該功能提取到服務中,並將具有正確消息,警告類等的對象從承諾返回給服務,然後再返回給控制器。我正在使用Angular BTW。 – Sam

+0

'checkPlate'應該是'plateCheck'對象的屬性嗎?我在想'checkPlate'應該只是一個叫做的函數。 –

回答

3

這可能只是一個範圍的問題,但通過調用plateCheck.checkPlate(fooPlateNumber)也許這將這樣的伎倆,以返回相同的對象。

var plateCheck = { 
     plateNumber: '', 
     message: '', 
     alertClass: '', 
     checkPlate: function (plateNumber) { 
      var me = this; 
      PlateCheckService.checkPlate(plateNumber).then(function (response) { 
       var data = response.data; 
       me.plateNumber = plateNumber; 
       if (data.VehicleAtl !== null) { 
        me.message = "Hot!"; 
        me.alertClass = 'alert-danger'; 
       } else { 
        me.message = "Plate #" + data.PlateNumber + " is clean."; 
        me.alertClass = 'alert-success'; 
       } 
      }); 
     } 
    }; 

但也許你可能只是提取服務功能,返回plateCheck這樣的對象。

function checkPlate(plateNumber) { 
    var plateCheck = {}; 
    plateCheck.plateNumber = plateNumber; 
    PlateCheckService.checkPlate(plateNumber).then(function (response) { 
     var data = response.data; 
     if (data.VehicleAtl !== null) { 
      plateCheck.message = "Hot!"; 
      plateCheck.alertClass = 'alert-danger'; 
     } else { 
      plateCheck.message = "Plate #" + data.PlateNumber + " is clean."; 
      plateCheck.alertClass = 'alert-success'; 
     } 
    }); 
    return plateCheck; 
} 
+1

我最終做了同樣的事情; 'var _this = this;'並使用該變量來設置對象的屬性。 +1的答案!謝謝一堆! – Sam

+0

沒問題,不客氣!更新了我的答案。 –