我正在尝试完成与官方knockoutjs教程的“单页面应用程序”部分中所做的类似的事情,其中我有多个视图首先工作,然后添加sammy以使其工作的URL。 在我的示例中,单击名称将使用单个项目详细信息视图替换列表视图。
这是我的jsfiddle:http://jsfiddle.net/of73rdxa/2/ 如果取消注释第104行:
//self.chosenFriend(friend);
在我尝试引入sammy并从网址传递id之前,你可以看到我的工作方式。不幸的是,这不再是我需要的,因为我现在想要从url中的id而不是点击的事件中获取结果。
第112行的评论:
//{ name: 'fred', age: '12' }
显示将起作用的格式的静态示例。不幸的是,我的getFriend方法没有以正确的格式返回数据以使其工作。
答案 0 :(得分: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();