灰烬背景误解

时间:2014-11-02 16:14:21

标签: javascript ember.js youtube

我一整天都在这里,显然有一些基本的遗失,请帮助我理解它是什么。

我正在尝试创建一个youtube播放列表应用程序,第一步我试图在youtube上搜索相关视频,并将结果返回到我的模型中。

我唯一确定的是搜索功能正常,因为我从另一个项目中获取了if。将值放入模型的方式有问题。

这是我到目前为止所得到的:

app.js

App = Ember.Application.create({});

App.Router.map(function() {
    this.resource('SearchYT');
    this.resource('Play');
});

App.IndexRoute = Ember.Route.extend({
    redirect : function() {
        this.transitionTo('SearchYT');
    }
});

App.SearchYTRoute = Ember.Route.extend({
    model : function() {
        return App.Video.all();
    }
});

App.Video = Ember.Object.extend({
    title : null,
    seconds : null,
    yid : null
});

App.Video.reopenClass({
    // there are no videos initially
    content : [],

    // Searching flag
    isSearching : false,

    actions : {
        makeSearch : function() {
            console.log('working1');

            // Start searching and remove existing results
            this.set('isSearching', true);
            this.set('content', []);

            var query = this.get('searchString');
            var c = $.getJSON("http://gdata.youtube.com/feeds/api/videos", {
                alt : 'json',
                'max-results' : 10,
                v : 2,
                q : query
            });
            c.success(function(data) {
                var entries = data.feed.entry, results = [];

                for (var i = 0; i < entries.length; i++) {
                    var e = entries[i];
                    results.push(App.Video.create({
                        yid : e.id.$t.split(':')[3],
                        seconds : parseInt(e.media$group.yt$duration.seconds),
                        title : e.title.$t
                    }));
                }
                this.set('content', results);
            });

            c.complete(function() {
                this.set('isSearching', false);
            });
        }
    }
});

请帮我理解我的问题, 提前谢谢。

1 个答案:

答案 0 :(得分:1)

这不是一个Ember问题,当您尝试设置内容时,您已超出范围。我已经更新了你的代码,显示了两种方法来处理这个,一个保持对此的引用,第二个保持对数组的引用。

    makeSearch : function() {
        console.log('working1');

        // Start searching and remove existing results
        // keep a reference to the new array, then use `pushObject`
        var newResults = [],
            self = this;
        this.set('isSearching', true);
        this.set('content', newResults);

        var query = this.get('searchString');
        var c = $.getJSON("http://gdata.youtube.com/feeds/api/videos", {
            alt : 'json',
            'max-results' : 10,
            v : 2,
            q : query
        });
        c.success(function(data) {
            var entries = data.feed.entry, results = [];

            for (var i = 0; i < entries.length; i++) {
                var e = entries[i];
                newResults.pushObject(App.Video.create({
                    yid : e.id.$t.split(':')[3],
                    seconds : parseInt(e.media$group.yt$duration.seconds),
                    title : e.title.$t
                }));
            }
            //  this.set('content', results); <-- this here is not the this out of the success
        });

        c.complete(function() {
            self.set('isSearching', false); // <-- same here, this is different
        });
    }