2016-02-04 42 views
0

我有下面這段代碼在我的流星應用的JavaScript /流星Android的對象返回模板

if (Meteor.isClient) { 
    Meteor.startup(function(){ 

    var onSuccess = function(acceleration){ 
     alert(acceleration); 
    }; 

    var onError = function(acceleration){ 
     return "error"; 
    } 

    var options = { frequency: 3000 }; // Update every 3 seconds 

    var getAcc = navigator.accelerometer.watchAcceleration(onSuccess, onError, options); 

    }); 
} 

什麼,做是獲取Android手機的加速計數據每3秒,並在成功的民調它會在警報中顯示對象。這工作正常。

但是,我不希望這個輪詢代碼在啓動功能。我想有更多的控制何時執行

我有一個模板,我想要顯示加速度計值。我改變了代碼的onSuccess上述方法返回的對象,而不是警告(啓動代碼的其餘部分是相同的):

var onSuccess = function(acceleration){ 
     return acceleration; 
    }; 

我的模板看起來是這樣的:

Template.rawData.helpers({ 
    acc: function(){ 
     alert(getAcc); 
     return getAcc; 
    } 
    }); 

我預計發生的情況是加速度計數據存儲在啓動函數中的getAcc中,然後通過acc將其返回到我的網頁。這似乎並沒有發生。模板中的alert也不會發生

有沒有辦法從啓動函數外部訪問這些cordova插件?我只是不正確地返回啓動和模板部分之間的對象?

我想我的其他首要的問題是:我不知道如何通過一個模板從模板幫手

回答

1

顯示這些加速計值如果theyre聚集在啓動功能,而不是你需要有模板更新時被動地更改數據。要做到這一點,設置一個reactive variable由回調得到更新。首先,安裝軟件包:

meteor add reactive-var 

然後,當創建模板,建立反應變量,並開始觀看回調:然後

Template.rawData.onCreated(function() { 
    self = this; 
    self.rawValue = new ReactiveVar(); 
    self.accWatchID = navigator.accelerometer.watchAcceleration(
     function(acc) { self.rawValue.set(acc); }, function() {}, { frequency: 3000 } 
    ); 
}); 

你的模板輔助函數可以返回反應變量的值,每當它改變你的模板將被更新:

Template.rawData.helpers({ 
    acc: function() { 
     return Template.instance().rawValue.get(); 
    } 
}); 

(請注意,在你原來的代碼,因爲沒有被稱爲警報,必須有中存在的問題你的模板。 ?是否有正確的名稱)

最後,你應該當模板被破壞停止回調:

Template.rawData.onDestroyed(function() { 
    navigator.accelerometer.clearWatch(this.accWatchID); 
}); 

請注意,我剛纔輸入的代碼在這裏沒有測試它。如果它不能馬上工作,你可能需要微調一下。