如何在ArrayController的内容中设置属性

时间:2013-03-26 16:13:19

标签: javascript ember.js handlebars.js

在我尝试访问内容时进行调试

this.get('this.content').objectAt(0).selected_group
true

但是当我尝试设置selected_group时,它会给我以下错误

this.get('this.content').objectAt(0).selected_group = false;
Error: assertion failed: Must use Ember.set() to access this property

当我尝试使用setter方法设置selected_group时,它会给出以下错误

Ember.set(this.get('this.content').objectAt(0).selected_group, false)
TypeError: Object #<error> has no method 'indexOf'

this.get('content')。objectAt(0)如下所示

Object {id: "GRP1", divisions: Array[6]}
__ember1364353119575_meta: Meta
divisions: Array[6]
0: Object
budget: Object
current_month_proj: Object
division_name: "North Florida"
facilities: Array[8]
id: "DIV1"
last_year: Object
prev_month: Object
prior_three_months: Object
__proto__: Object
1: Object
2: Object
3: Object
4: Object
5: Object
length: 6
__proto__: Array[0]
get group_name: function () {
id: "GRP1"
set group_name: function () {
__proto__: Object

为ArrayController的内容(obj数组)设置/添加属性的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

你走在正确的道路上。你只需要解决一些问题。

而不是this.get('this.content'),请使用this.get('content')

此外,以下是如何使用Ember.set:

this.get('content').objectAt(0).set('selected_group', false);

由于ArrayController是一个代理,您可以直接访问其数组而不使用content

this.objectAt(0).set('selected_group', false);

您也可以使用Ember的特殊数组属性firstObject

this.set('firstObject.selected_group', false);

答案 1 :(得分:0)

我想我已经找到了解决问题的方法,而不是拥有vanilla json对象我们应该总是有ember对象,我们可以用ember包装器包装我们的json对象,这会提供像set和get这样的方法

答案 2 :(得分:0)

或您使用序列化程序。无论如何,只要您的对象没有名为“selected_group”的属性(并且,通过您的示例对象,似乎就是这种情况),您将无法以任何方式设置它。