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)