ember 中模型中每个项目的 ArrayController 的属性

Posted

技术标签:

【中文标题】ember 中模型中每个项目的 ArrayController 的属性【英文标题】:ArrayController's property for each item in the model in ember 【发布时间】:2015-05-27 11:01:45 【问题描述】:

我有一个具有“isChecked”属性(布尔属性)的数组控制器。在我的控制器中,我想获取“已检查”(我的意思是已选择)的元素的集合。我不确定如何访问模型中控制器的属性。

我的控制器如下:

App.ExampleController = Ember.ArrayController.extend(
    isChecked: false,
    totalElements: function()
    
        return this.model.get('length');
    .property('@each'),
    selectedElements: function()
    
        var content = this.get('content');
        console.log(content.filterBy('isChecked'));
        return content.filterBy('isChecked');
    .property('isChecked'),
);

我将“isChecked”属性链接到每个助手内的复选框,如下所示..

<ul>
   #each model
        <li>
            input type="checkbox" checked=isChecked
            name
        </li>
    /each
</ul>

我将显示模型中的所有项目,并带有一个与之关联的复选框。用户可以从中选择几个项目。所以我想要那些东西。

现在我想获取“已检查”的元素列表。作为计算属性或在任何操作下。

谢谢。

【问题讨论】:

你能分享一下你的模型结构吗? 我的模型只有几个属性。我只是从网上获取它并直接从路线返回。我的意思是我不把它保存在商店里。 是否像 [name:'A', isChecked:true,name:'B', isChecked:false] ?而您只想将带有 isChecked 属性的复选框列表显示为 true? No no.. 该模型根本不包含“isChecked”属性。我将显示所有项目。从中,用户可以“检查”一些项目。我想要那些物品。我编辑了这个问题。也许它现在会给你一个清晰的画面 如果您没有每个选择的 isChecked 属性,那么您必须创建。然后使用observes('@each.isChecked'),只要你的isChecked属性发生变化就会触发。现在要获取所选选项的列表,您可以像现在一样创建一个计算属性,只需 filterBy。但主要的是您需要每个复选框的 isChecked 属性。你这样做的方式是错误的(即对所有人都有一个 isChecked 属性) 【参考方案1】:

我认为您需要将isChecked 属性移动到ObjectController 上,然后使用itemController 属性在阵列控制器中引用该控制器。

阵列控制器:

App.IndexController = Ember.ArrayController.extend(
  itemController: 'color',

  totalElements: function() 
    return this.get('length');
  .property('[]'),

  selectedElements: Ember.computed.filterBy('@this', 'isChecked', true)
);

@this 表示计算属性将引用项目控制器数组。)

物品控制器:

App.ColorController = Ember.ObjectController.extend(
  isChecked: false
);

http://emberjs.jsbin.com/tazojejuwi/1/edit

希望对您有所帮助。

【讨论】:

不客气。请注意,ObjectController 将在 Ember v1.11 中被弃用:emberjs.com/guides/deprecations/#toc_objectcontroller 那有没有其他方法可以解决这个问题?还是我应该使用 cmets 中提到的方法? 我认为没有“objectController”它对我来说很好。就像我在问题中所做的那样。将“isChecked”属性保留在arrayController中并通过您提到的方法对其进行过滤。 这将在 Ember 2.0 之前正常工作。当 1.11 发布时,可能会有一些更好的说明来处理弃用。 ItemController 在 Ember 1.13 中已弃用。

以上是关于ember 中模型中每个项目的 ArrayController 的属性的主要内容,如果未能解决你的问题,请参考以下文章

EmberJS:更改加载模型的 url (ember-data)

使用 Ember.js 按模型类型/对象值选择视图模板

Ember 数据模型中的计算属性不适用于 ember-cli-mirage 模型

Ember - 在视图中显示模型数据

Ember Docs - Readonly嵌套数据

如何定期更新 Ember 的模型(例如在 setInterval 中)?