如何在会话变量更改时执行Meteor.call

如何在会话变量更改时执行Meteor.call,meteor,meteor-blaze,Meteor,Meteor Blaze,以下是我所拥有的: 模板: <body> {{> resultSession}} {{> resultMethod}} </body> <template name="resultSession"> <button>Click me</button> <p>Session.get('length') returned {{returned}}</p> </template>

以下是我所拥有的:

模板:

<body>
  {{> resultSession}}
  {{> resultMethod}}
</body>

<template name="resultSession">
  <button>Click me</button>
  <p>Session.get('length') returned {{returned}}</p>
</template>

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>

{{>resultSession}
{{>resultMethod}
点击我
Session.get('length')返回{{returned}

Meteor.call返回{{returned}

客户端:

Template.resultSession.events({
“单击按钮”:函数(){
Session.set('length',Math.floor((Math.random()*20)+1));
}
});
Template.resultSession.helpers({
返回:函数(){
return Session.get('length');
}
});
Template.resultMethod.helpers({
返回:函数(){
Meteor.call('returnArray',Session.get('length'),函数(err,res){
返回res.length;
});
}
});
服务器端:

Meteor.methods({
“returnArray”:函数(长度){
var-arr=[];
arr[length-1]=0;
返回arr;
}
});
TL;博士

您可以在这里查看代码并使用它

如您所见,我的方法接受
number
,并返回长度等于
number
的数组

问题是我如何制作
流星。每次
会话
变量更改时调用
开火?


p.S.值被故意返回到两个不同的模板

您可以简单地重构代码以调用Meteor方法点击事件

Template.resultSession.events({
  'click button': function () {
    var length = Math.floor((Math.random() * 20) + 1);
    Session.set('length', length);
    Meteor.call('returnArray', length, function (err, res) {
      Session.set('result', res.length);
    });
  }
});

Template.resultSession.helpers({
  returned: function () {
    return Session.get('length');
  }
});

Template.resultMethod.helpers({
  returned: function() {
    return Session.get('result');
  }
});
您还可以使用
Tracker.autorun
跟踪
会话
变量的修改,并重新运行任意代码

Tracker.autorun(function(){
  var length = Session.get("length");
  console.log("length new value =", length);
});

你可以简单地重构你的代码来调用Meteor方法点击事件

Template.resultSession.events({
  'click button': function () {
    var length = Math.floor((Math.random() * 20) + 1);
    Session.set('length', length);
    Meteor.call('returnArray', length, function (err, res) {
      Session.set('result', res.length);
    });
  }
});

Template.resultSession.helpers({
  returned: function () {
    return Session.get('length');
  }
});

Template.resultMethod.helpers({
  returned: function() {
    return Session.get('result');
  }
});
您还可以使用
Tracker.autorun
跟踪
会话
变量的修改,并重新运行任意代码

Tracker.autorun(function(){
  var length = Session.get("length");
  console.log("length new value =", length);
});

你可以简单地重构你的代码来调用Meteor方法点击事件

Template.resultSession.events({
  'click button': function () {
    var length = Math.floor((Math.random() * 20) + 1);
    Session.set('length', length);
    Meteor.call('returnArray', length, function (err, res) {
      Session.set('result', res.length);
    });
  }
});

Template.resultSession.helpers({
  returned: function () {
    return Session.get('length');
  }
});

Template.resultMethod.helpers({
  returned: function() {
    return Session.get('result');
  }
});
您还可以使用
Tracker.autorun
跟踪
会话
变量的修改,并重新运行任意代码

Tracker.autorun(function(){
  var length = Session.get("length");
  console.log("length new value =", length);
});

你可以简单地重构你的代码来调用Meteor方法点击事件

Template.resultSession.events({
  'click button': function () {
    var length = Math.floor((Math.random() * 20) + 1);
    Session.set('length', length);
    Meteor.call('returnArray', length, function (err, res) {
      Session.set('result', res.length);
    });
  }
});

Template.resultSession.helpers({
  returned: function () {
    return Session.get('length');
  }
});

Template.resultMethod.helpers({
  returned: function() {
    return Session.get('result');
  }
});
您还可以使用
Tracker.autorun
跟踪
会话
变量的修改,并重新运行任意代码

Tracker.autorun(function(){
  var length = Session.get("length");
  console.log("length new value =", length);
});
就像@saimeunt说的,使用

模板:

<body>
  {{> resultSession}}
  {{> resultMethod}}
</body>

<template name="resultSession">
  <button>Click me</button>
  <p>Session.get('length') returned {{returned}}</p>
</template>

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>
当模板未渲染时,渲染内部自动运行停止

如@saimeunt所说,使用

模板:

<body>
  {{> resultSession}}
  {{> resultMethod}}
</body>

<template name="resultSession">
  <button>Click me</button>
  <p>Session.get('length') returned {{returned}}</p>
</template>

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>
当模板未渲染时,渲染内部自动运行停止

如@saimeunt所说,使用

模板:

<body>
  {{> resultSession}}
  {{> resultMethod}}
</body>

<template name="resultSession">
  <button>Click me</button>
  <p>Session.get('length') returned {{returned}}</p>
</template>

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>
当模板未渲染时,渲染内部自动运行停止

如@saimeunt所说,使用

模板:

<body>
  {{> resultSession}}
  {{> resultMethod}}
</body>

<template name="resultSession">
  <button>Click me</button>
  <p>Session.get('length') returned {{returned}}</p>
</template>

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>

当模板未渲染时,渲染内部自动运行将停止

您的反应式代码工作正常。 如果您在Meteor.call中添加一个console.log,您将看到服务器返回了正确的答案

Template.resultMethod.helpers({
  returned: function() {
    Meteor.call('returnArray', Session.get('length'), function (err, res) {
      console.log('it came back ' + res.length);
      return res.length;
    });
  }
});
我已经在服务器的返回中加入了一个会话变量,所以现在您可以看到您的反应式代码非常简单——不需要复杂的自动运行功能

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>

您的反应式代码工作正常。 如果您在Meteor.call中添加一个console.log,您将看到服务器返回了正确的答案

Template.resultMethod.helpers({
  returned: function() {
    Meteor.call('returnArray', Session.get('length'), function (err, res) {
      console.log('it came back ' + res.length);
      return res.length;
    });
  }
});
我已经在服务器的返回中加入了一个会话变量,所以现在您可以看到您的反应式代码非常简单——不需要复杂的自动运行功能

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>

您的反应式代码工作正常。 如果您在Meteor.call中添加一个console.log,您将看到服务器返回了正确的答案

Template.resultMethod.helpers({
  returned: function() {
    Meteor.call('returnArray', Session.get('length'), function (err, res) {
      console.log('it came back ' + res.length);
      return res.length;
    });
  }
});
我已经在服务器的返回中加入了一个会话变量,所以现在您可以看到您的反应式代码非常简单——不需要复杂的自动运行功能

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>

您的反应式代码工作正常。 如果您在Meteor.call中添加一个console.log,您将看到服务器返回了正确的答案

Template.resultMethod.helpers({
  returned: function() {
    Meteor.call('returnArray', Session.get('length'), function (err, res) {
      console.log('it came back ' + res.length);
      return res.length;
    });
  }
});
我已经在服务器的返回中加入了一个会话变量,所以现在您可以看到您的反应式代码非常简单——不需要复杂的自动运行功能

<template name="resultMethod">
  <p>Meteor.call returned {{returned}}</p>
</template>


我可以,但我想知道是否有可能在反应式var Change上调用Metheor方法例如,如果meteor方法返回一些复杂的对象,这些对象不应该存储在会话varhm中,不知道如何使用它。同样,如果meteor方法的响应太复杂,无法存储在会话中,该怎么办?我可以在模板帮助程序中使用
Tracker
吗?我可以,但我想知道是否有可能对反应式var change调用Metheor方法例如,如果meteor方法返回一些复杂的对象,这些对象不应该存储在会话varhm中,但不确定如何使用它。同样,如果meteor方法的响应太复杂,无法存储在会话中,该怎么办?我可以在模板帮助程序中使用
Tracker
吗?我可以,但我想知道是否有可能对反应式var change调用Metheor方法例如,如果meteor方法返回一些复杂的对象,这些对象不应该存储在会话varhm中,但不确定如何使用它。同样,如果meteor方法的响应太复杂,无法存储在会话中,该怎么办?我可以在模板帮助程序中使用
Tracker
吗?我可以,但我想知道是否有可能对反应式var change调用Metheor方法例如,如果meteor方法返回一些复杂的对象,这些对象不应该存储在会话varhm中,但不确定如何使用它。同样,如果meteor方法的响应太复杂,无法存储在会话中,该怎么办?我可以在模板帮助程序中使用
Tracker
吗?但如果meteor方法的响应太复杂,无法存储在会话中怎么办?但它们是局部范围的。如果您需要全局存储某些内容,它们将不起作用。您希望在此变量中存储什么类型的响应?您可以将EJSON对象存储在会话变量()中,但我不确定它可以容纳的最大大小。但是,如果meteor方法的响应太复杂,无法存储在会话中,该怎么办?但它们是局部范围的。如果您需要在全球范围内存储某些内容,它们将不起作用。您需要什么样的响应