2014-01-09 2 views
0

나는이 사이트를 읽었으며 마침내 내 요구에 충분히 구체적으로 대답하지 않은 질문을 가지고있다.Knockout JS Observable Array에서 요소 업데이트

C# 응용 프로그램의 KO 뷰 모델에 전달 된 데이터 배열에서 관찰 가능한 배열을 만들었습니다.

self.Stuff = ko.observableArray(data.Stuff); 

이 배열에는 관찰 가능한 요소가 없으며 내 문제가 있습니다. onclick을 통해 요소 (상태)를 편집해야합니다. 나는 요소를 관찰 가능하게 만들 필요가 있다는 것을 안다. (data.Stuff 부분으로 어떻게해야할지 모르겠다.) "valueHasMutated"를 수행 할 필요가 있지만 구문이 어떻게 작동하는지 완전히 확신 할 수 없다.

물론 내 밀어 넣기 및 제거 작업은 arrayobservable을 트리거하고 뷰를 새로 고치기 때문에 잘됩니다.

if ($form.valid() && isValidStuff) { 
     self.Stuff.push({ ABC: self.ABCInput(), XYZ: self.XYZInput(), Status: self.StatusInput()}); 
     self.resetValues(); 
    } 

    self.removeStuff = function() { 
     self.Stuff.remove(this); 
    }; 

    self.StuffStatusChng= function(){ 
     //What to do? 
     self.Stuff.vauleHasMutated(); 
    }; 

올바른 방향으로 어떤 도움이나 푸시가 도움이 될 것입니다. 감사합니다! 충분한 정보가 없으면 내가 제공 할 수있는 것을 알려주십시오.

감사합니다.

답변

0

이 정보가 도움이 되나요?

var OneStuff = function (data) { 
    this.ABC = ko.observable(data.ABC); 
    this.XYZ = ko.observable(data.XYZ); 
    this.Status = ko.observable(data.Status); 
}; 
self.Stuff = ko.observableArray(ko.utils.arrayMap(data.Stuff, function (oneStuffData) { 
    return new OneStuff(oneStuffData); 
})); 

이렇게하면 개별 속성을 관찰 할 수 있습니다.

는 밀어 :

self.Stuff.push(new OneStuff({ ABC: self.ABCInput(), XYZ: self.XYZInput(), Status: self.StatusInput()})); 
+0

이것은 정말 고마워! :) – Steve

1

어떻게 녹아웃 매핑 플러그인을 사용하여 약 :

http://knockoutjs.com/documentation/plugins-mapping.html

그것은 JSON 문자열의 배열을 소요하고 관찰과 관찰 배열을 만드는 fromJSON 방법이있다 각 속성에 대한 속성 :

바이올린은 여기에서 찾을 수 있습니다 : http://jsfiddle.net/jiggle/uzn7Z/, 한 번 바인딩, ca n은 이름을 업데이트하고 속성을 업데이트합니다 따라

HTML :

<div data-bind="foreach: people"> 
     <div> 
      <input type="text" data-bind="value:firstName"/> 
      <span data-bind="text: firstName"></span> 
      <span data-bind="text: lastName"></span> 
    </div> 

</div> 

코드 :

var stuff = '[{"firstName":"fred","lastName":"bloggs"},{"firstName":"david","lastName":"frost"}]'; 

console.log(stuff); 
var people = ko.mapping.fromJSON(stuff); 
console.log(people()); 
var viewModel ={}; 

viewModel.people=people; 

ko.applyBindings(viewModel); 

그냥 다운로드해야하고 knockout.mapping.js을 포함한다.

관련 문제