2012-10-21 3 views
2

나는이 작업을 수행하려고 :Knockoutjs + ko.mapping.fromJS + 계산 된 필드 계산 계산하지는

myData = {weight: 100, anotherWeight: 120.55}; // when my data is plain json - all work 

$.when($.getJSON(url, {param}, function(data) {myData = data}). 
//when i got it from ajax - dosn't work 
then(function(){ 
    var taskModel = function(data) 
    { 
    var self = this; 
    ko.mapping.fromJS(data, {}, self); 
    this.computedWeight = ko.computed(function() { return self.weight() + 
     ' ---- ' + 
     self.anotherWeight() + ' kg'; }); 
    } 
    ko.applyBindings(new taskModel(myData)); 
}); 

<input type="text" data-bind="value: weight"/><br/> 
<input type="text" data-bind="value: anotherWeight"/><br/> 
<span data-bind="text: computedWeight"></span> 

첫 번째 시간 - 로딩 후 - computedWeight 바로 계산이다. 그러나 weight 나 anotherWeight 필드를 변경할 때 - computedWeight는 변경되지 않습니다.
감사합니다. 올바른 데이터가 서버에 반환되어

+0

ko.mapping.fromJSON()를 시도? 성공 콜백에서 반환되는 것은 무엇입니까? 제발 [jsfiddle] (http://jsfiddle.net/zEfRj/4/) – nemesv

+0

고마워. jsfiddle - http://jsfiddle.net/EfRj/4/ - 모든 작업. 하지만 제 경우에는 계산 된 필드가 계산되지 않습니다. 나는 아약스 응답을 조사하려고 노력할 것이다. – awzster

답변

0

대신 ko.mapping.fromJS()

+0

감사합니다. 문제가 해결되었습니다. 내 오류가 있습니다. 나는 weight & anotherWeight에 사용자 정의 바인딩을 사용합니다. 이 경우 간단한 계산 (...)이 작동하지 않습니다. 간단한 bndig <... data-bind = "value : weight">를 사용하면 모든 작업이 가능합니다.
죄송합니다. 내 eeror. – awzster