Ember绑定到数组元素

时间:2012-12-09 18:14:25

标签: javascript ember.js

我正在尝试在控制器和模型之间设置一个ember绑定。控制器是数组的一部分(参见问题Ember.js views (unlimited number)),所以我试图设置绑定到模型中的元素(ArrayProxy),其索引与控制器本身的索引相同。

如果我将它链接到ArrayProxy的非索引元素,则绑定有效,但是如果我尝试设置数组的元素则不行。所以,如果我设置绑定,如:

answerBinding: 'App.SurveyData.test'

并在App.SurveyData中将'test'设置为字符串,例如“StackOverlow”,双向绑定设置正确。如果我设置了像

这样的绑定
answerBinding: 'App.SurveyData.content'

其中content是一个数组,我可以在控制台中查看'answer'的值为'Array [2]',并且每个元素都等于'Test object'按预期方式

当我尝试将answerBinding设置为

answerBinding: 'App.SurveyData.content[0]'

尝试根据需要将answer连接到SurveyData中的第一个元素,我可以在控制台中查看'answer'的值是undefined。

代码位于http://jsfiddle.net/reubenposthuma/dyLGG/1/

任何想法都将不胜感激

2 个答案:

答案 0 :(得分:2)

Ember的绑定仅适用于属性。除非您通过计算属性执行此操作,否则无法绑定Array的特定索引,例如:

answerBinding: 'App.SurveyData.firstItem'

...并在App.SurveyData中定义了计算属性:

firstItem: function() { return this.objectAt(0); }.property('content')

以这种方式思考:数组索引是[]函数的一个参数(不是字面意思,但为了解释这一点。)绑定不能除了参数;它们纯粹是要绑定的属性的静态路径。

答案 1 :(得分:0)

正如Mars所说,绑定不能接受数组的索引,所以我创建了一个解决方法。它是一种方式,虽然它可以被修改为在数组本身上有一个观察者用于双向绑定。为了我的目的(从调查中获取数据并将其放入答案数组),单向绑定可以完美地工作。

answerObserver: function() {
  App.SurveyData.content[this.id-1] = this.answer;
}.observes('answer'),

每当数据(在本例中为文本框)发生更改时,更改都将复制到数组的索引中。