2

我正在尝试在控制器和模型之间设置余烬绑定。控制器是数组的一部分(请参阅问题Ember.js views (unlimited number)),因此我正在尝试设置与模型(ArrayProxy)中的元素的绑定,其索引与索引相同控制器本身。

如果我将绑定链接到 ArrayProxy 的非索引元素,则绑定有效,但如果我尝试设置数组的元素,则绑定无效。所以,如果我像这样设置绑定:

answerBinding: 'App.SurveyData.test'

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

answerBinding: 'App.SurveyData.content'

其中内容是一个数组,我可以在控制台中查看“答案”的值为“数组 [2]”,并且每个元素都等于“测试对象”,如预期

当我尝试将 answerBinding 设置为

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

它试图根据需要将答案链接到 SurveyData 中的第一个元素,我可以在控制台中查看“答案”的值未定义。

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

任何想法将不胜感激

4

2 回答 2

2

Ember 的绑定仅适用于属性。不能绑定 Array 的特定索引,除非您通过计算属性这样做,例如:

answerBinding: 'App.SurveyData.firstItem'

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

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

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

于 2012-12-10T03:05:30.943 回答
0

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

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

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

于 2012-12-10T17:10:39.607 回答