通过google jsapi加载带有ember.js的RSS / XML feed

时间:2012-09-20 21:29:30

标签: xml rss ember.js jsapi

我正在尝试通过google jsapi将XML Feed添加到我的应用程序中,并且我非常接近但只是处于这个错误的头部敲击阶段。

未捕获错误:无法对不在DOM中的Metamorph执行操作。

问题在于这一行:me.pushObject(t);

如何从该功能中访问父作用域?我接近这个错误,有没有完全不同的方法呢?

我可以确认我正在获取XML,我只是无法将其从函数中恢复为ember。

绝望之下,我尝试了App.myController.pushObject(t);和许多其他滑稽的解决方案。

我使用JSON进行测试,它100%有效,但我必须加载XML RSS,所以这就是了。

以下是问题的片段:

    App.myController = Ember.ArrayController.create({
    content: [],
    init: function(){
        me = this;

        function feedLoaded(result) {
            me.set('content', []);
            if (!result.error) {
                var mObj = [];
                for (var i = 0; i < result.feed.entries.length; i++) {
                    var cData = result.feed.entries[i];
                    var t = App.HospTime.create({
                        title: cData.title,
                        name: cData.name,
                        date: cData.date
                    });
                    me.pushObject(t);
                }
            } else {
                alert(result.error);
            }
        }

        var feed = new google.feeds.Feed("myrss_feed.xml");
        feed.load(feedLoaded);
    }
})

2 个答案:

答案 0 :(得分:1)

如果我删除整个函数function feedLoaded(result) {并将其替换为 jSON 调用,则它可以正常工作并将 jSON 数据传递回控制器。

答案 1 :(得分:0)

我认为您可以尝试使用jQuery.proxy() [jQuery reference],看看是否有帮助。

因此,您可以尝试使用feed.load(feedLoaded);设置me作为feedLoaded的上下文(而不是feed.load($.proxy(feedLoaded, me));,而不是me = this,而在内部执行另一个me.set('content', []); feedLoaded。

另外,{{1}}也不会有上下文问题吗?也许我误解了你的问题。