2014-02-24 2 views
0

У меня есть метод публикации, который вызывает другой метод внутри него, как это:Access опубликовать функции-х это, внутри функции, вызываемой публиковать - Meteor

Meteor.publish("myList", function() { 
    myFunction(); 
}); 

function myFunction() { 
    // i want to access the publish methods *this* here 
} 

У меня есть USECASE, что я должен получить доступ к Meteor.publish this внутри метода myFunction без прохождения каких-либо параметров. Есть ли способ сделать это?

+0

Не знаете точно, как насчет установки переменной сеанса и получения результатов? – Sasikanth

+0

@sasikanth 'Meteor.publish' - это серверная функция, а' Session' - клиентская функция. – sbking

+0

Я понимаю, что это не отвечает на ваш вопрос, но я обычно предпочитаю делать следующее: var publish = this; myFunction (публикация, другоеArg0, otherArg1); – zorlak

ответ

3

Это звучит, как вы ищете один из следующих стандартных функций JavaScript:

Поскольку вы не проходя никаких параметров в функция, либо будет работать нормально, но call(), вероятно, лучший выбор.

Это позволяет вам вызывать функцию, устанавливая значение this внутри функции независимо от того, что вы хотите. Так что для вашего случая, это может выглядеть примерно так:

Meteor.publish("myList", function() { 
    // sends the current function's `this` value to the other function, so the 
    // other function can access it as its own `this` 
    myFunction.call(this); 
}); 

function myFunction() { 
    // the value of `this` will be whatever you passed to the `call()` method 
    console.log(this); 
} 

Обратите внимание, что по умолчанию при вызове функции по себе (без оператора точки, call(), apply(), или с помощью другого специального метода bind()) , значением функции this будет глобальный объект (специальный объект с именем global на сервере или специальный объект window в браузере). Если вы используете строгий режим ES5 (вы бы знали, есть ли у вас), то значение по умолчанию будет null.

+0

Я ищу без параметра. Что-то вроде «super.this» или тому подобное. Методы вызывающего абонента –

+0

Невозможно это сделать. Не могли бы вы объяснить, почему вы не можете передать параметр? Использование 'call (this)' не передает параметр, просто устанавливая значение 'this' во время выполнения. Как вы можете видеть в моем примере кода, другая функция не имеет параметров. – sbking

+0

@shamohd Этот вопрос звучит как классический [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Если вы дадите более подробную информацию о том, что вы на самом деле пытаетесь сделать, было бы намного легче решить вашу проблему. Я не могу думать о ситуации, когда ваше предлагаемое решение будет необходимо; Я гарантирую, что есть лучший способ сделать это. Фактически, если ваше решение является возможной особенностью языка, оно, вероятно, проявляется в некоторых проблемах безопасности и производительности. – sbking

Смежные вопросы