2014-06-21 88 views
0

我有一個角色程序,其中包含一個包含當前值(非常像上下文)的映射的服務。在我的程序中的不同位置,我將該服務稱爲獲取某物的當前值。該服務被稱爲CrsViewContext和方法是相當簡單當作爲參數傳遞給函數時,Javascript變量變爲undefined

.service('CrsViewContext', function() { 
    var currentInstances = {}; 

    this.setCurrent = function (domain, instance) { 
     currentInstances[domain] = instance; 
     console.log('ViewContext setCurrent: ' + domain); 
     console.dir(instance); 
    }; 

    this.getCurrent = function (domain) { 
     console.log('ViewContext getCurrent: ' + domain); 
     console.dir(currentInstances[domain]); 
     return currentInstances[domain]; 
    }; 

    this.resetCurrent = function (domain) { 
     console.log('ViewContext resetCurrent: ' + domain); 
     currentInstances[domain] = null; 
    }; 
}); 

在我控制我通過這個CrsViewContext作爲參數,做這樣的事情

.controller('MyCtrl', function (CrsViewContext) { 
    var n = CrsViewContext.getCurrent ('RealEstate'); 
    console.log ("get current Real estate"); 
    console.dir (n); 
    console.log ("current real estate id: "+n.id); 
}); 

然而最近的日誌被不確定的,即使是我的控制檯我可以看到之前的聲明返回一個對象,該對象定義了一個id和它的值

與JavaScript和/或Restangular有關,因爲我使用Restangular來檢索該對象。同樣在如果從控制檯訪問它的一個側面說明,你有沒有問題,從控制檯獲取ID

n=$('#wrapper').injector().get('CrsViewContext').getCurrent('RealEstate').id; 

回報3

在此先感謝

帕斯卡爾

+0

不知道這是否是問題,但它是一種代碼氣味,「currentInstances」是全球性的。爲什麼不用「this.currentInstances」替換「currentInstances」並在控制器對象的構造函數中初始化? –

+0

這不是全球性的。它是在一個單例服務中定義的。我的理解是,它不能從服務外部獲得,而不是添加到這個 –

+0

的變量或函數啊,從代碼片段中不清楚是否存在圍繞代碼摘錄的函數。 –

回答

0

多後戳我刪除了一個調用$對象,該對象是在代碼中的前面的變量。 Restanglar返回承諾,我的理解是,在承諾上調用$ object將保證它的值返回,但事實並非如此。將這些變量保持爲承諾似乎有效。不太明白爲什麼 -

相關問題