Ember アプリからの小さな抜粋がここにあります。マイページには、それぞれが独自のコントローラーを持つ異なるデータを含む多数のビューが含まれています。
stationList ビューのコンテンツを更新するために、stationList コントローラーと「対話」する必要がある 1 つのビューに検索フィールド (インデックス ビュー内) を配置する必要があります。これはうまくいきません。エラーが表示されます: TypeError: this.get(...).search は関数ではありません
ログには、使用するように依頼したコントローラーの名前が出力されます: App.StationListController
StationList ビューの内部に 2 つ目の検索フォームを追加しました。これはうまく機能します。今回のロギングは、StationListController オブジェクトのダンプを出力します。したがって、私のコード (SearchFormView 内): controllerBinding : 'App.StationListController' にもかかわらず、他の検索フォームがコントローラーを正しく設定していないと推測しています。
だから私は私の質問はなぜだと思いますか?
あるビューのフォーム フィールドの変更をルーティングして、別のビューのコントローラーで関数を呼び出すにはどうすればよいですか?
これが私のコードです:
<script type="text/x-handlebars" data-template-name="application">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<div id="searchForm">search form view search:
{{#view App.SearchFormView}}
{{view App.StationSearchField}}
{{/view}}
</div>
<div id="stationList">{{render stationList}}</div>
</script>
<script type="text/x-handlebars" data-template-name="stationList">
station list view search: {{view App.StationSearchField}}
<ul>
<li>List</li>
<li>will</li>
<li>go</li>
<li>here</li>
</ul>
{{searchTerm}}
</script>
と
App = Ember.Application.create({})
App.SearchFormView = Ember.View.extend({
init : function()
{
console.log("SearchFormView init", this.get('controller'))
}
})
App.StationSearchField = Ember.TextField.extend({
keyUp: function(event) {
var searchTerm = this.value
console.log("value",searchTerm,this.get('controller'))
this.get('controller').search(searchTerm)
}
})
App.StationListController = Ember.ArrayController.extend({
content : [],
searchTerm : null,
search : function(term)
{
this.set("searchTerm",term)
console.log("searching",term)
}
});