2014-07-07 3 views
1

Phonegap (리플 에뮬레이터에서 실행)과 함께 데이터 바인딩에 KO MVVM을 사용하고 있지만 문제가 있습니다.녹아웃 : 선택 요소의 옵션을 사용하여 데이터 개체 바인딩

select 요소에 선택한 값의 객체를 바인딩하려고합니다.

내 코드입니다 : 내가 선택 목록에서 AB - Alberta을 선택하면

HTML

<select data-bind="options: pro(), 
        optionsText: 'value', 
        optionsValue: this, 
        value: province"> 
</select> 

JS는

function screen1ViewModel() 
{ 
    var self = this; 
    self.pro = ko.observableArray(); 
    self.province = ko.observable(); 
} 

$(document).ready(function() { 
    var vm = new screen1ViewModel(); 

    var pro = [{ 
     "symbol": "AB", 
     "value": "AB - Alberta" 
    }, 
    { 
     "symbol": "BC", 
     "value": "BC - British Columbia" 
    }]; 

$.each(pro, function(index, item) { 
       vm.pro().push(item); 
      }); 
}); 

console.log(vm.province().symbol); 
console.log(vm.province().value); 

예를 들어, 나는 너무 다른 키입니다 필요합니다.

도움이 될 것입니다.

+1

예. 잡히지 않은 오류 : 바인딩을 구문 분석 할 수 없습니다. 메시지 : ReferenceError : 할당에서 왼쪽이 잘못되었습니다. 바인딩 값 : options : pro(), optionsText : 'value', optionsValue : this, value : province –

답변

2
당신은 단지

때문에 optionsValue: this, (이상하게도 있지만이 최대 Demo KO 3.0에서 작업한다)를 제거 할 필요가

기본 동작은 Knockout이 전체 객체를로 사용한다는 것입니다.3210 당신이 필요로 정확히 인 지정 더 optionsValue 옵션이없는 경우 :

<select data-bind="options: pro, optionsText: 'value', value: province"></select> 

데모 JSFiddle합니다.

+0

위대한 트릭. 나는 결코 그것에주의를 기울이지 않았다! –

+0

그것은 KO 버전의 문제였다. 위대한 –

+0

. 당신은 내 하루를 보냈다. –

1

귀하의 뷰 모델이 방해 받고있는 것 같습니다. 여기

<select 
    data-bind=" 
     options: pro, 
     optionsText: 'value', 
     optionsValue: 'symbol', 
     optionsText: 'value' 
     value: province 
"> 
</select> 

뷰 모델

function screen1ViewModel() 
{ 
    var self = this; 
    self.pro = ko.observableArray(); 
    self.province = ko.observable(); 

    self.GetValue = function(){ 
     console.log(self.province()) 
    } 
} 

$(document).ready(function() { 
    var vm = new screen1ViewModel(); 


    var pro = [{ 
     "symbol": "AB", 
     "value": "AB - Alberta" 
    }, 
    { 
     "symbol": "BC", 
     "value": "BC - British Columbia" 
    }]; 

    vm.pro(pro) 
    ko.applyBindings(vm) 
}); 

Demo

Documentation 도움이 될 것입니다 솔루션

보기입니다.

편집 :

수정 기능

self.GetValue = function(){ 
    var obj = {} 
    ko.utils.arrayForEach(self.pro(),function(item){ 
     if(item.symbol ==self.province()){ 
      obj = item 
     } 
    }) 
    console.log(obj) 
} 

Demo

+0

이렇게하면 작동하지만, select 요소에 "optionsValue : this"가 필요하므로 SYMBOL과 VALUE를 모두 얻을 수 있습니다. 키 (다른 키가 있으면). 감사합니다. –

+0

전혀 문제가 없습니다. 편집 내용보기 –

+0

"self.province = ko.observable()"에 직접 전체 객체를 저장할 방법이 없다는 것을 의미합니다. : –

관련 문제