gpt4 book ai didi

Javascript/meteor android 返回对象到模板

转载 作者:行者123 更新时间:2023-12-03 07:46:09 29 4
gpt4 key购买 nike

我的 meteor 应用程序中有以下代码

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);

});
}

它的作用是每 3 秒检索一次 Android 手机加速计数据,并且在成功轮询后,它将在警报中显示该对象。这工作得很好。

但是,我不希望这个轮询代码出现在启动函数中。我想更好地控制何时执行

我有一个模板,我想在其中显示加速度计值。我更改了上面代码中的 onSuccess 方法以返回对象而不是发出警报(其余启动代码相同):

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

我的模板如下所示:

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

我期望发生的情况是将加速度计数据存储在启动函数中的 getAcc 中,然后通过 acc 将其返回到我的网页。这似乎不会发生。模板中的警报也不会发生

有没有办法从启动功能之外访问这些cordova插件?我只是错误地返回了启动部分和模板部分之间的对象吗?

我想我的另一个首要问题是:如果这些加速度计值是在启动函数中收集的,而不是从模板助手中收集的,我不确定如何通过模板显示这些加速度计值

最佳答案

当数据发生变化时,您需要让模板使用react式更新。为此,请设置 reactive variable由回调更新。首先,安装包:

meteor add reactive-var

然后,当创建模板时,创建 react 变量并开始观察回调:

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);
});

请注意,我只是在此处键入了该代码,而没有对其进行测试。如果它不能立即工作,您可能需要对其进行一些微调。

关于Javascript/meteor android 返回对象到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35197555/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com