更新侧边栏视图内容的Ember.js最佳做法是什么?

时间:2013-01-28 00:23:37

标签: javascript model-view-controller controller ember.js

我正在开发一个简单的应用程序。作为应用程序的一部分,有一个侧边栏显示较大集合的子集。主要集合显示在右侧,并显示集合中的所有项目,侧边栏显示标记为“已加星标”的项目的子集设置为TRUE。

我有一个名为“广告系列”的简单控制器,看起来像这样......

var App = require('app');

App.CampaignsIndexController = Em.ArrayController.extend({

});

模型看起来像这样......

var App = require('app');
var attr = DS.attr;

App.Campaign = DS.Model.extend({

    name: DS.attr('string'),
    starred: DS.attr('boolean')

});

保持这个例子非常基本。

我们的App路由器映射如下......

var App = require('app');

App.Router.map(function() {

    this.route('index', { path: '/'});

    this.resource('campaigns', { path: '/campaigns'}, function() {

        this.route('new', { path: '/new' });
        this.route('campaign', { path: '/:campaign_id' });

    });

});

主应用程序模板如下所示。请注意侧边栏视图如何直接放入模板中。插座{{ outlet page }}是上面的路线会丢弃其内容的地方。在此示例中,路径/campaigns将显示{{ outlet page }}中所有广告系列的列表。

<div id="app" class="">

    <div id="sidebar" class="">

        {{ view App.StarredCampaignsView }}

    </div>

    <div id="page" class="">

        {{ outlet page }}

    </div>

</div>

广告系列的路线将渲染连接到页面插座...

var App = require('app');

App.CampaignsCampaignRoute = Ember.Route.extend({

    renderTemplate: function(controller, model) {

        this.render({outlet: 'page'});

    }

});

我的困境
绑定传入

的内容的最佳做法是什么

{{ view App.StarredCampaignsView }}

这样它反映了

中看到的确切集合

{{ outlet page }}

奖励积分
将集合过滤到模型中看到的布尔标志'starred'的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

将其绑定到控制器内定义的计算属性

控制器

filteredValues: function(){
  //returns all the records whose starred property is true
  return this.get('campaigns').filterProperty("starred"); 
}.property('campaigns.@each.starred')

车把

<div id="sidebar" class="">
  {{#collection contentBinding="filteredValues"}}
    <b>{{view.content.name}}</b>
  {{/collection}}
</div>
相关问题