我一整天都在这里,显然有一些基本的遗失,请帮助我理解它是什么。
我正在尝试创建一个youtube播放列表应用程序,第一步我试图在youtube上搜索相关视频,并将结果返回到我的模型中。
我唯一确定的是搜索功能正常,因为我从另一个项目中获取了if。将值放入模型的方式有问题。
这是我到目前为止所得到的:
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);
});
}
}
});
请帮我理解我的问题, 提前谢谢。
答案 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
});
}