Ember.js で、あるアレイ コントローラのコンテンツを別のアレイ コントローラのコンテンツにリンクする際に問題が発生しています。Stackoverflow を精査しましたが、解決策がないようです。
シナリオは単純です。「キャンペーン」というモデルがあります。モデルはかなり基本的で、次のように見えます...
キャンペーン モデル:
App.Campaign = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
opts: DS.attr('string'),
starred: DS.attr('boolean'),
keywords: DS.hasMany('App.Keyword')
});
// Create dummy campaign array
App.Campaign.FIXTURES = new Array();
// Populate dummy campaign array
...
キャンペーン コントローラーも基本的なものです。内部で何も行われていない単純な ArrayController です...
キャンペーン インデックス コントローラー:
App.CampaignsIndexController = Em.ArrayController.extend({
});
この質問のために、アプリケーション テンプレートを必要なものだけに落とし込みました。以下に示すように、アプリケーション テンプレートにはサイドバーがあります。サイドバーには 2 つのビューがあります。1 つのビューはサイトのナビゲーション用で、もう 1 つのビューは「スター付きキャンペーン」用です。このビューには、キャンペーンのコレクション全体のサブセットが含まれます。
アプリケーション テンプレート:
<!-- ================================================== -->
<!-- ======================= APP ====================== -->
<!-- ================================================== -->
<div id="app" class="">
<!-- ================================================== -->
<!-- ==================== SIDEBAR ===================== -->
<!-- ================================================== -->
<div id="sidebar">
{{ view App.NavigationView }}
{{ view App.StarredCampaignsView controller="App.StarredCampaignsController" }}
</div>
<!-- ================================================== -->
<!-- ====================== PAGE ====================== -->
<!-- ================================================== -->
<div id="page" class="">
{{ outlet page }}
</div>
</div>
スター付きキャンペーンのコントローラーがあります。これは、物事が混乱し始めるところです。このコントローラーでは、ArrayController のコンテンツを、すべての Campaign モデルの配列を保持する CampaignsIndexController のコンテンツにバインドします。
スター付きキャンペーン コントローラー:
App.StarredCampaignsController = Em.ArrayController.extend({
content: [],
contentBinding: Ember.Binding.oneWay('App.CampaignsIndexController.content')
});
スター付きキャンペーンのビューも非常にシンプルです...
スター付きキャンペーン ビュー:
App.StarredCampaignsView = Em.View.extend({
templateName: 'templates/layout/starred-campaigns',
});
スター付きキャンペーンのテンプレートは次のようになります。controller.content 内のアイテムをループして別のビューに渡そうとしています。
スター付きキャンペーン テンプレート:
<h5 class="sidebar-title">Starred Campaigns</h5>
<ul class="starred-campaigns clearfix">
{{# each item in controller.content }}
{{ view App.StarredCampaignItemView itemBinding="item" }}
{{/ each }}
</ul>
ただし、これらすべてにもかかわらず、App.CampaignsIndexController によって表される App.Campaign 配列に値を入力しても、StarredCampaignsController のコンテンツは空のままです。私たちのアプローチに何か問題がありますか?ここでは本当に単純なものが欠けているように感じます。