Javascript/meteor android 返回对象到模板

标签 javascript android meteor callback

我的 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/

相关文章:

javascript - 在带有 Redux 的 React Native 中使用 NetInfo 中间件

javascript - 获取 IFrame 子项高度时出错

android - 以编程方式打开 Google 云端硬盘中的文件,而不使用 Drive API

javascript - Meteor.wrapAsync

javascript - If() block 更改接收到的 Meteor 数据

即使刷新后也能保持按钮禁用的 JavaScript

javascript - Object.watch() 适用于所有浏览器?

android - 移动设备上的多选 <select> 框

android - SparseArray remove() 和 delete() 有什么区别?

javascript - Meteor: react 性更改之间集合项目的 UI 缓动