2013-02-18 4 views
0

주에서 관찰 가능한 :이하지ObservableArrays에 대한 질문입니다.처리 배열

의 내가 다음 뷰 모델이 있다고 가정 해 봅시다 :

var viewmodel = { 
    arrayOfBooleans: [ 
     ko.observable(false), 
     ko.observable(false), 
     ko.observable(false) 
    ] 
} 

그래서 같이보기 :

<div data-bind="foreach: arrayOfBooleans"> 
    <button data-bind="click: ????">Set to true</button> 
</div> 

내가 foreach 내에서 수행 할 수있는 true로 관찰을 설정 <button>를 얻을 수를 클릭하면? data-bind="click: someFunction"을 사용하면 첫 번째 인자 인 someFunction gets는 배열에있는 관측 값의 랩핑되지 않은 값 (관측 값 자체가 아님)이며 관측 가능 값에서 돌아 오거나 사용자 정의 인수를 전달할 수있는 방법이 없습니다.

+0

왜 배열이 'observablearray'가 아닌가? – Tyrsius

+0

[녹아웃 바인딩이 간단한 관찰 가능 배열을 사용하여 업데이트되지 않음] 가능한 복제본 (http://stackoverflow.com/questions/10621008/knockout-binding-doesnt-update-using-array-of-simple-observables) –

+0

@ Tyrsius : 안타깝게도 ObservableArrays는 배열 상태를 관리하는 것이 아니라 배열의 순서 나 구성원을 변경하는 데 사용됩니다. 이 상황에서 배열 자체의 변경 사항에 대해서는 아무 것도 알려주지 않습니다. – Impirator

답변

1

희망 사항을 알려주세요. 당신이 라디오 버튼으로 원하는 경우가 훨씬 더 만약이 같은

<div data-bind="foreach: arrayOfBooleans"> 
    <span>Set To True</span><input type=radio data-bind="value:one" /> 
</div> 

간단보다

var viewmodel = { var self = this; self.arrayOfBooleans = ko.observableArray([]); self.arrayOfBooleans.push(new _newBoolean()); self.arrayOfBooleans.push(new _newBoolean()); self.arrayOfBooleans.push(new _newBoolean()); function _newBoolean() { self.one = ko.observable(false); } self.setToTrue = function(index){ self.arrayOfBooleans()[index].one(true); }; } 

당신은 버튼

<div data-bind="foreach: arrayOfBooleans"> 
    <button data-bind="click: $root.setToTrue($parent.arrayOfBooleans.indexOf($data))"> 
    Set to true 
    </button> 
    <input type=hidden data-bind="value:one" /> 
</div> 

로합니다. . 업 링크를 클릭하십시오. * 또는 * 문제가 해결되면 .. 대답으로 표시

+1

나쁘지는 않습니다. 보스. 나는 더 간단한 해결책은 [녹아웃 바인딩은 간단한 관찰의 배열을 사용하여 업데이 트되지 않습니다]에 게시 된 것 같아요 (http://stackoverflow.com/questions/10621008/knockout-binding-doesnt-update-using-array-of-simple- 관찰 가능). – Impirator