2012-03-12 3 views
0

Я хочу создать простой в использовании API для некоторых из этих функций, но не имея возможности привязать функцию к новой области I.E область, в которой она принадлежит! Я не могу понять, как сделать это иначе, чем сумасшедший ерунда или сумасшедшие вещи с этим, что делает вещи намного более запутанными.Javascript lambda scoping и кодовый факторинг

Понятно, что я теряю рассудок, потому что фильтр paramater должен запускаться в контексте выполненного обратного вызова. Я думаю, что это моя проблема, параметр фильтра не является обратным вызовом, он является параметром и должен иметь область действия, где он работает, а не там, где он определен.

Кто-нибудь, пожалуйста, скажите мне, что я просто пропустил что-то глупое.

Существуют ли какие-либо языки, которые поддерживают привязку области лямбда туда, где она вызывается, а не там, где она определена?

var scrape = function(selector, filter) { 
    jsdom.env({ 
     html: data, 
     src: [ jQuery ], 
     done: function(errors, window) { 
      var $ = window.$; 
      eval('filter=' + filter.toString()); 
      debugger; 
      var entries = $(selector).filter(filter); 
      console.log('spo'); 
      debugger; 
     } 
    }); 
}; 

scrape('p',function(index) { 
    debugger; 
    if(this.children.length == 3) { 
     return $(this.children[0]).is('a') && 
       $(this.children[1]).is('font') && 
       $(this.children[2]).is('span'); 
    } else { 
     return false; 
    } 
}); 
+0

Там нет никакого способа определить/доступа к локальной переменной с произвольным именем в текущей области. Вы можете изменить это время через 'call' /' apply' или навсегда через 'bind' (все это методы функций) – kirilloid

+0

Я даже не мог этого сделать, потому что jQuery определяет это в функции. Вещи были бы более захватывающими, если бы я мог. – Prospero

ответ

0

Не совсем уверен, что делает ваш код, но по вашему описанию, вы ищете $.proxy. Он связывает обратный вызов с конкретным контекстом. Если вы использовали подчеркивание, вы посмотрите на _.bind

Документация: http://api.jquery.com/jQuery.proxy/

+0

должен был упомянуть об этом на сервере. Я повторно объявляю функцию фильтра, используя toString и eval, чтобы дать им область, которая, как я думаю, должна иметь. – Prospero

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