我正在尝试在控制器和模型之间设置一个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/
任何想法都将不胜感激
答案 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'),
每当数据(在本例中为文本框)发生更改时,更改都将复制到数组的索引中。