Как мне использовать замыкания для доступа к твитерам @Anywhere javascript api? - PullRequest
1 голос
/ 29 августа 2010

Я хочу сделать то, что на классическом объектно-ориентированном языке, таком как Java, C # и т. Д., Очень легко сделать.Я просто хочу получить доступ к свойству экземпляра объекта.Объект имеет глобальную область видимости в объекте окна браузера и предоставляется API twitter @anywhere.

В качестве примеров моего кода предположим, что вы уже вошли в систему.

Если бы я использовалЯ бы сказал, например, java (при условии, что все поля были общедоступными:

twttr = new twtter();
String screenName = twtter.currentUser.data('screen_name');

. По какой-то причине это очень сложно в Javascript. Я получил обходной путь, работающий где-то внутри анонимного метода, где твиттер вездеAPI использует, я устанавливаю значение, которое я хочу, для элемента DOM, и выявляю его позже. Хотя это уродливо. Я просто хочу получить к нему прямой доступ.

Вот то, что у меня есть, но это не так.даже не проходите проверку синтаксиса в eclipse:

function AnywhereFacade()
{
    var twitterReference;
    window.twttr.anywhere
    (
        return function(T)
        {
            twitterReference = T;
        };
    )
    getValue(propertyToGet)
    {
        return twitterReference.currentUser.data(propertyToGet);
    }
};

var anywhereFacade = AnywhereFacade();

var screen_name = anywhereFacade.getValue("screen_name");

alert("screen name is: " + propertyGetter);

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 августа 2010

это все, что мне нужно было сделать.

document.getElementById('messagePanel').innerHTML = "loading...";
                window.twttr.anywhere(function(T)
                {

                    document.getElementById('messagePanel').innerHTML = "screen_name: " + T.currentUser.data('screen_name');
                });

это заставило меня понять, что моя проблема была в том, что мне пришлось использовать обратный вызов, когда твиттер вернулся из асинхронного вызова. это помогло мне решить мою начальную проблему, как обернуть его для gwt.

0 голосов
/ 29 августа 2010

Я сделал нечто похожее в своем приложении, так как использую Facebook JavaScript SDK и Twitter SDK и хочу предоставить согласованный интерфейс для доступа к обоим.Так что я именую переменные под App.Для твиттера в любом месте, вот как захватывается переменная.

window.App = {};

twttr.anywhere(function(T) {
    App.Twitter = {
        getValue: function(property) {
            return T.currentUser.data(property);
        },
        getPublicTimeline: function() {
            return T.Status.publicTimelime();
        }
    };
});

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

Теперь, когда библиотека загружается, эта функция будет выполняться, определив App.Twitter свойство, которое содержит getValue функцию.Объект Anywhere или T захвачен в замыкании.

Если вы сейчас вызовете,

App.Twitter.getValue("screen_name");

фактически любой объект (T), будет использоваться для получения имени экранасвойство.

...