我们无法在 Ember.js 中将一个数组控制器的内容与另一个数组控制器的内容链接起来。我们已经搜索了 Stackoverflow,但似乎没有任何解决方案适合我们。
场景很简单。我们有一个名为“Campaign”的模型。该模型非常基本,看起来像这样......
竞选模式:
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
...
Campaign 控制器也是基本的。这是一个简单的 ArrayController,里面什么也没发生……
活动索引控制器:
App.CampaignsIndexController = Em.ArrayController.extend({
});
为了这个问题,我们已经将我们的应用程序模板剥离到了基本要素。如下所示,应用程序模板有一个侧边栏。侧边栏中有两个视图。一个视图用于网站导航,另一个视图用于“已加星标的广告系列”。此视图将包含整个活动集合的一个子集。
申请模板:
<!-- ================================================== -->
<!-- ======================= 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>
我们有一个用于 Starred Campaigns 的控制器。这就是事情开始变得混乱的地方。在我们的控制器中,我们将 ArrayController 的内容绑定到 CampaignsIndexController 的内容,其中包含所有 Campaign 模型的数组。
加星标的活动控制器:
App.StarredCampaignsController = Em.ArrayController.extend({
content: [],
contentBinding: Ember.Binding.oneWay('App.CampaignsIndexController.content')
});
对于 Starred Campaigns 的视图也很简单...
已加星标的广告系列视图:
App.StarredCampaignsView = Em.View.extend({
templateName: 'templates/layout/starred-campaigns',
});
这就是 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>
然而,尽管如此,StarredCampaignsController 中的内容仍然是空的,即使我们填充了由 App.CampaignsIndexController 表示的 App.Campaign 数组。看到我们的方法有什么问题吗?我觉得我们在这里遗漏了一些非常简单的东西。