1

我想做一些在 Java、C# 等经典的面向对象语言中很容易做到的事情。我只是想访问实例化对象的属性。该对象在浏览器的窗口对象中是全局范围的,并由 twitter @anywhere API 提供。

对于我的代码示例,假设您已经登录了用户。

例如,如果我使用 java,我会说(假设所有字段都是公共的:

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

出于某种原因,这在 Javascript 中很难。我已经找到了一种解决方法,在 Twitter 任何 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 这么难用?我想做的是使用我认为的闭包。

谢谢!

4

2 回答 2

0

我在我的应用程序中做了类似的事情,因为我使用的是 Facebook JavaScript SDK 和 Twitter SDK,并希望提供一个一致的接口来访问这两者。所以我命名下的变量App。对于任何地方的 twitter,这就是捕获变量的方式。

window.App = {};

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

我们正在调用该anywhere函数并向其传递一个回调函数。需要回调函数,因为此时可能不会加载任何位置的库。通过传递整个函数,我们说只要加载了任何地方的库,就应该执行这个函数。

Now when the library does load, this function will execute, define the App.Twitter property which contains a getValue function. The anywhere or T object is captured in the closure.

If you now call,

App.Twitter.getValue("screen_name");

the actually anywhere object (T), will be used to get the screen_name property.

于 2010-08-29T07:45:05.547 回答
0

this is all I needed to do.

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

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

this made me realize my issue was just that I had to use a callback for when twitter returned from the async call. that helped me solve my initial problem of how to wrap it for gwt.

于 2010-08-31T06:31:10.860 回答