2015-03-19 21 views
0

我想完成類似於在官方knockoutjs教程的「單個頁面應用程序」部分所做的一些工作,其中我有多個工作視圖然後添加sammy以使其可以在Url上運行。 在我的示例中,單擊名稱用單項詳細視圖取代了列表視圖。與Knockout.js一起使用sammy.js來顯示url中的單個項目

這裏是我的jsfiddle:http://jsfiddle.net/of73rdxa/2/ 如果您取消註釋行104:

//self.chosenFriend(friend); 

你可以看到我怎麼過這個工作之前,我試圖引進薩米和網址,通過具有IDS。不幸的是,這不再是我所需要的,因爲我現在想從url中獲取結果,而不是點擊事件。

註釋掉行112:

//{ name: 'fred', age: '12' } 

顯示,將工作的格式的靜態實例。不幸的是,我的getFriend方法沒有以正確的格式返回數據來完成這項工作。

+0

只是一個供參考我公司開始做SPA的利用基因敲除和我們看到一個非常有用的教程來自John Papa的複數視角,http://www.pluralsight.com/courses/spa。部分視頻是他構建的代碼陣營的示例解決方案,並且有一個完整的KO SPA應用程序,使用sammy,放大,需求。它非常複雜並且幫助了我們很多。我建議看看它。 – segFault 2015-03-27 21:07:50

回答

0

問題是,getFriend().name之類不會評估任何事情,因爲getFriend()現在沒有回報,並且無法同步返回異步ajax調用的結果。

相反,你可以通過getFriend()回調所以它的範圍爲Ajax成功功能,like so (jsfiddle)

self.getFriend = function(id, cb){ 
var getString = 'http://rest.learncode.academy/api/johnbob/friends/' + id; 

$.ajax({ 
    type: 'GET', 
    url: getString, 
    success: function(data) { 
    console.log("from getFriend", data); //returns friend id#1 
    console.dir(data); 
    cb(data); 
    } 
}); 
... 
Sammy(function() { 
    this.get('#:friendId', function() { 
     self.getFriend(this.params.friendId, self.chosenFriend); 
    }); 
}).run(); 
+0

感謝lossleader,林不知道,如果我明白爲什麼「getFriend()現在沒有回報」,爲什麼通過self.chosenFriend作爲回調正在解決這個問題? – user1469779 2015-03-23 16:36:46

+0

因此,getFriend()正在調用$ .ajax()而沒有返回語句,所以getFriend()未定義。如果您返回$ .ajax(..)的結果,您仍然沒有返回所獲取的數據,則您將返回承諾以獲取此數據,因此無論是哪種情況,getField()的調用方都無法查看數據,它必須提供接收數據的功能。以下是承諾版本的示例:http://jsfiddle.net/bs9xfcwe/1/ – lossleader 2015-03-23 17:26:53

+0

感謝您的解釋使用 – user1469779 2015-03-24 14:39:30

相關問題