2013-06-04 20 views
11

관측 가능한 배열을 구현하고 그 내부에 관측 가능한 객체 (JS 객체)가 있어야합니다. 그리고보기에서이 배열을 반복하고 객체를 가져오고 객체 속성을 표시합니다. 다음과 같은 객체가 있다고 가정 해 보겠습니다.관측 가능한 배열 내에서 녹아웃 관측 가능한 객체

{"name":"john","age":21,"address":"No 25"} 

관찰 가능한 배열이 위와 같은 객체로 구성되어 있다고 가정 해 보겠습니다.

그때 나는 특정 개체의 단일 재산 (예를 들어, 이름)을 변경하고 뷰의 변화를 볼 필요가 싶습니다.

어떻게 녹아웃을 사용하여이를 수행 할 수 있습니까?

감사합니다.

답변

9

사용자를 viewModel에 설치하고 knockout mapping으로 매핑하면 원하는 결과를 얻습니다. 다음과 같이하십시오 :

myObservableArray.push(new UserViewModel({"name":"john","age":21,"address":"No 25"})); 

var UserViewModel = function(data){ 
    var self = this; 
    ko.mapping.fromJS(data, {}, self);  
} 

이 방식으로 매핑 된 속성은 각각 관찰 가능 항목이되고 변경되면 마크 업에 반영됩니다.

+0

지금까지 답변에서 언급 된 플러그인은 포기 된 것 같습니다. –

+0

아직 Knockout (3.4.0)의 최신 버전과 호환됩니다. –

2

모델을 관측 가능한 뷰 모델로 변환하려면 ko.utils.arrayMapko.mapping.fromJS을 사용할 수 있습니다.

var source = [{"name":"john","age":21,"address":"No 25"}]; 
var vm = ko.utils.arrayMap(source, function (item) { 
    return ko.mapping.fromJS(item) 
}); 

See fiddle

2

간단하게 다음과 같이 데이터 항목에 대한 새로운 모델을 정의하고 각 속성을 관찰합니다 당신이 그들을 데이터, 루프를 얻을 때

var dataItemModel = function (name, age, address) { 
    this.name = ko.observable(name); 
    this.age = ko.observable(age); 
    this.address = ko.observable(address); 
} 

, 당신의 dataItemModel를 만들 (관찰 할 수있는 속성이 있음)이 항목을 ObservableArray에 추가하십시오.

관련 문제