2014-01-08 5 views
0

foreach 항목 observables가 업데이트되도록 observableyarray를 올바르게 만들지 못했습니다. 또한 나는 위와 관련된 클릭 바인딩에 대해 업데이트 된 모델 (observablearay)을 가져올 수 없습니다.knockout foreach doesnt 업데이트 관찰 가능

<div>   
    <!-- THIS NEVER UPDATES IF YOU CHANGE TEXTAREA--> 
    <pre data-bind="text: ko.toJSON($data, null, 2)"></pre> 

    <div data-bind="foreach: Items"> 
     <div data-bind="text: TestProperty"></div> 
     <textarea data-bind="text: DataInput"></textarea>   
     <!-- THIS NEVER UPDATES IF YOU CHANGE TEXTAREA--> 
     <span data-bind="text: DataInput"></span> 
    </div> 
    <button data-bind="click: test">Save</button> 
</div> 

JS

var RiskItemModel = function (item) { 
    var self = this; 

    self.DataInput = ko.observable(item.DataInput); 
    self.TestProperty = ko.observable("test"); 
}; 

var PortfolioRiskModel = function (data) { 
    var self = this; 

    self.Items = ko.observableArray(); 
    // fill with initial data 

    if (data) {   
     $.each(data.Items, function (index, item) { 
      self.Items.push(ko.observable(new RiskItemModel(item))); 
      //self.Items.push(new RiskItemModel(item)); 
     }); 
    }; 

    self.test = function() { 
     // I AM ALWATYS GETTING OLD VALUES HERE! 
     alert(ko.unwrap(ko.unwrap(self.Items)[0]).DataInput()); 
    }; 
}; 


var data = { 
    "$id": "1", 
     "Items": [{ 
     "DataInput": "first" 
    } 
        /*, { 
     "DataInput": "second" 
    }*/ 

    ] 
}; 

var ChartSelectedRiskType = new PortfolioRiskModel(data); 
ko.applyBindings(ChartSelectedRiskType); 

현재 jsfiddle으로 재생할 수 있습니다 : 당신은 텍스트 영역에 잘못된 attributte에 데이터를 바인딩 한 http://jsfiddle.net/L3tJL/

답변

1

.

은 다음과 같이해야합니다

<textarea data-bind="value: DataInput"></textarea> 
관련 문제