如何在Meteor js中以正确的方式使用.bind(this)方法

时间:2017-03-08 15:54:15

标签: javascript node.js meteor

我有一个愚蠢的问题(或不是),我们如何在Meteor中完全或大致使用绑定方法?

我有以下代码,但事实上我正在重复它,打扰了我。

非常感谢你的意见!

胆红素

Meteor.publish('allComments', function() {

var comments = Comments.find();

comments.observeChanges({

  added: function (id, fields) {
    this.added('comments', id, fields);
  }.bind(this),

  changed: function (id, fields) {
    bind.changed('comments', id, fields);
  }.bind(this),

  removed: function (id) {
    this.removed('comments', id);
  }.bind(this)
 });

});

2 个答案:

答案 0 :(得分:0)

这与Meteor无关,但Javascript的工作原理如何。在你的js中,你将每个函数绑定到赋予Meteor.publish的匿名函数。

一种方法:

Meteor.publish('allComments', function() {

  var comments = Comments.find();

  var observer = {

    added: function (id, fields) {
      this.added('comments', id, fields);
    },

    changed: function (id, fields) {
      bind.changed('comments', id, fields);
    },

    removed: function (id) {
      this.removed('comments', id);
    }
   };

  observer.added = observer.added.bind(observer);
  observer.changed = observer.changed.bind(observer);
  observer.removed = observer.removed.bind(observer);

  comments.observeChanges(observer);

});

答案 1 :(得分:0)

你应该使用observeChanges。

查看文档(observeChanges

这是一个简单的例子

Meteor.publish('orders', function(userId) {
  const fieldsIncluded = {
    fields: {
      _id: 1,
      idOrder: 1,
    },
  };

  Orders.find((userId), fieldsIncluded).observeChanges({
    added: (id, order) => {
      this.added('orders', id, formatOrderForGroom({ id, order }));
    },
    changed: (id) => {
      const fullOrder = Orders.findOne({ _id: id });

      this.changed('orders', id, formatOrderForGroom({ id, fullOrder }));
    },
    removed: (id) => {
      this.removed('orders', id);
    },
  });

  this.ready();
});