Ember.jsが新しく、APIを使用してYoutubeを模倣するアプリケーションを作成しようとしています。現在、YouTubeのApiから初期情報を取得してロード時にページを生成するルートを持っています。私は、ユーザーからの入力を収集し、文字列に基づいて結果をリストに再作成するために使用される検索バーコンポーネントがあります。問題は、ユーザーからの入力を取得している間に、RouteモデルがAPIから更新データを取得するためにリフレッシュしていないことです。以下は私のコードです。私のビデオルートvideo.hbsためコンポーネントからルートモデルを更新してください
テンプレート:私の検索バーの私の検索バー用
// app/templates/components/search-bar.hbs
<div class="col-md-12 col-md-offset-4">
<form class="form-inline">
<div class="form-group" onsubmit="return false">
{{input type="text" class="form-control" value=search id="search" placeholder="Search Videos..."}}
</div>
<button type="submit" {{action "updateSearch"}}class="btn btn-success">Search</button>
</form>
</div>
コンポーネントの
// app/templates/video.hbs
<div class="row">
{{search-bar}}
<div class="row">
<div class="col-md-12">
<hr>
<br>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="row">
{{video-list model=model}}
<div class="col-md-4 pull-right video-container">
{{#if videoId}}
<iframe id="video-player" src="https://www.youtube.com/embed/{{videoId}}"></iframe>
{{else}}
<iframe id="video-player" src="https://www.youtube.com/embed/kEpOF7vUymc"></iframe>
{{/if}}
</div>
</div>
</div>
</div>
</div>
テンプレート
// app/components/search-bar.js
import Ember from 'ember';
export default Ember.Component.extend({
userSearch: "",
actions: {
updateSearch: function() {
this.set("userSearch", this.get("search"));
this.modelFor("videos").reload();
}
}
});
ビデオルート
// app/routes/video.js
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
var userSearch = this.get("search") === undefined ? "Code" : this.get("search");
this.set("search", userSearch);
var url = "https://www.googleapis.com/youtube/v3/search?part=snippet&q="+ userSearch +"&maxResults=50&key="api key goes here";
return Ember.$.getJSON(url).then(function(data) {
return data.items.filter(function(vid) {
if(vid.id.videoId) {
return vid;
}
});
});
}
});
私はそれ以前に試してみました。ページ全体がリロードされ、ユーザー入力が失われます。 – DLF85
リフレッシュすると、beforeModel、model、afterModelフックが発生します。データが更新されます。あなたのコードは、ユーザ入力が失われる理由であるかもしれない 'search'や' userSearch'プロパティと少し混乱しているようです。検索のためにqueryParamを導入する必要があるかもしれません。 – kumkanillam
私の理解は、入力から値を取り出し、その値をuserSearchプロパティに設定することです。私の期待は正しいのですか、私は何か違うことをしていますか? – DLF85