来自另一种方法的Meteor调用模板方法

时间:2014-05-18 14:11:27

标签: javascript jquery methods callback meteor

我想在客户端的方法中调用方法,但我不知道如何处理它,我已经通过调用myFunction()this.myFunction()进行了尝试但它是不工作......这是我的代码

Template.decision.rendered = function () {
    if ($(".active").length == 0) {
        var random = Math.floor(Math.random() * 1000);
        var $items = $(".item");
        $items.eq(random % $items.length).addClass("active");
    }
    $.each($(".item"), function (index, value) {
        if (Session.get($(this).attr('id'))) {
            this.showResults(value.option);
        }
    });
};
Template.decision.showResults = function($option) {
    $('#result').html('Option ' + $option + ' is voted');
};

如您所见,我想为showResults回调中的每个项目致电rendered ...

2 个答案:

答案 0 :(得分:1)

使用Template.decision.showResults();愚蠢的我找到它。

答案 1 :(得分:1)

我认为根据你想要做的更好的方法是使用Session变量或Meteor方法:

会话变量。

Template.decision.created = function() {
  Session.setDefault('showResults', false);
}

Template.decision.rendered = function() {
  // [...]

  $.each($(".item"), function (index, value) {
    if (Session.get($(this).attr('id'))) {
      Session.set('showResults', true);
    }
  });
}

Template.decision.showResults = function() {
   return Session.get('showResults');
}

// in your template
<template name="decision">
  {{#if showResults}}
    <p>Here is the results.</p>
  {{/if}}
</template>

流星法。

// On the client.
Template.decision.rendered = function() {
  // [...]

  $.each($(".item"), function (index, value) {
    if (Session.get($(this).attr('id'))) {
      Meteor.call('showResults', function(error, result) {
        if (!error and result === true) {
          $('.class').hide()  // It is here that you modify the DOM element according to the server response and your needs.
        }
      });
    }
  });
}

// Server-side method
// But, if you want it to react like a stub, put it inside your lib folder.
Meteor.methods({
  showResults: function() {
    // do your thing
    result = true; // let's say everything works as expected on server-side, we return true
    return result;
  }
});