2014-02-20 106 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請求按以下方式(一切都是一樣的,但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);作爲屬性self.chosenMailData = newValue; //this will not work。如果它是不可觀察的,那麼當然,任何綁定都不會被更新,因爲他們不知道該值已經改變。

原因是,如果您替換observable屬性(而不是可觀察值),所有訂閱仍將保留給仍舊具有舊值的舊觀察值。

關於錯誤,它聲明500這使得它聽起來像服務器錯誤,而不是客戶端錯誤。

+0

對不起,它是articleInfo,而不是SelectedMailData。而且你保存了幾個小時的絕望編碼。非常感謝你。 –

相關問題