管理模板中定义的嵌套视图的顺序

时间:2013-11-07 12:47:31

标签: javascript ember.js

问题:

如何获取嵌套视图列表(因为它们在模板中定义)并重新排序?或者将视图从一个parentView移动到另一个?

例如,我想将带日期和列的位置列与图像一起切换,或者在用户操作中隐藏其中任何一个

{{#data-grid}}
  {{#grid-column}}
    {{format-date date}}
  {{/grid-column}}
  {{#grid-column}}
    {{#link-to 'somewhere'}}<img scr="i.png" title="hello"/>{{/link-to}}
  {{/grid-column}}
{{/data-grid}}

原因:

我正在实现datagrid,在运行时重新排序和隐藏了列。声明所有案例的视图类,然后在控制器中使用它们对我来说似乎很难看。

已经尝试使用ContainerView但找不到用模板内容填充childViews的方法

更新 当前状态下数据网格的源代码:http://pastebin.com/E61e6WCt

1 个答案:

答案 0 :(得分:0)

如果您想自己实现,请查看CollectionView。您的每个列都应该是视图内容数组中的一个项目。重新排序数组也应该正确地重新排序DOM元素。

这是一个粗略的草图:基本上你在你的子类中覆盖createChildView。您可以将字符串传递到内容数组中以指示其类型。在createChildView之内,您可以通过attrs对象及其内容属性访问当前项目。

App.ColumnsCollectionView = Ember.CollectionView.extend({
    content : ["date", "image"],
    createChildView: function(viewClass, attrs) {
        var itemFromContent = attrs.content; // is either 'date' or 'image'
        if (itemFromContent == 'date') {
          viewClass = App.YourDateColumnView;
        } else {
          viewClass = App.YourImageColumnView;
        }
        return this._super(viewClass, attrs);
    }
});