2014-02-20 2 views
0

나는 ajax를 통해 서버에서 데이터를로드하고이 정보를 모델에 출력하는 녹아웃 스크립트를 가지고있다. 모든 것을 단순화하기 위해, 내 모델은 다음과 같습니다ajax 호출에서 요청 된 데이터를 수정할 수있는 방법이 있습니까?

function ArticleViewModel() { 
    var self = this; 
    this.articleInfo = ko.observable(); 

    this.getArticle = function(id) { 
     $.get("/router.php", { articleId: id }, self.articleInfo, 'json'); 
    }; 
}; 

모든 (내보기는 서버에서 정보로 채워집니다) 잘 작동합니다. 하지만 필요한 것은이 정보를 수정하는 것입니다 (예를 들어 타임 스탬프에서 사람이 읽을 수있는 형식으로 데이터 변경).

이것을 이해하는 한 가지 방법은 knockout computed observables입니다. 그러나 여기에 타임 스탬프가 필요 없기 때문에이 작업을 수행하는 이유가 표시되지 않습니다. 업데이트 후에 데이터를 한 번만 변경하고 사용할 수 있습니다 (if 나는 틀렸다. 나는 왜 계산 된 관측 자료로 원하는 것을 성취 할 수 있는지, 왜 어떻게 듣는지 기쁘게 생각한다.) 그래서

내가 (모든 것이 동일하지만, AJAX 호출이 콜백가) 다음과 같은 방법으로 아약스 요청에 내 데이터를 변경하려고 :

$.get("/router.php", { type : 'mail' }, function(i){ 
    var d = new Date(i.date); 
    self.articleInfo = { 
     date: d.toString(), 
     title: i.title 
    }; 
}, 'json'); 

내가 페이지에 오류가없는,하지만를 정보가 나타납니다. 다른 페이지로 이동하면 경고 메시지가 표시됩니다. TypeError {stack: (...), message: "500 Error get /#Home Property 'articleInfo' of object #<ArticleViewModel> is not a function"}

무엇이 잘못 되었나요?

답변

2

내가 self.chosenMailData는 관찰을 것으로 추측하고있어,하고 있는지 당신은 속성 self.chosenMailData = newValue; //this will not work로 즉 self.chosenMailData(newValue);하지, 함수로 설정해야합니다. 관찰 할 수없는 경우, 값이 변경되었음을 알지 못하기 때문에 바인딩이 업데이트되지 않습니다.

관찰 가능 속성 (관찰 가능 값이 아님)을 바꾸면 모든 구독이 여전히 이전 값을 가진 이전 관찰 가능 항목이됩니다.

오류와 관련하여 500은 클라이언트 측 오류가 아닌 서버 오류처럼 들리게합니다.

+0

죄송 합니다만, selectedMailData가 아닌 articleInfo입니다. 그리고 필사적 인 코딩 작업을 몇 시간 만 안겨 줬습니다. 고맙습니다. –

관련 문제