使用带有Knockout.js的sammy.js来显示来自url的单个项目

时间:2015-03-19 11:41:27

标签: javascript knockout.js sammy.js

我正在尝试完成与官方knockoutjs教程的“单页面应用程序”部分中所做的类似的事情,其中​​我有多个视图首先工作,然后添加sammy以使其工作的URL。 在我的示例中,单击名称将使用单个项目详细信息视图替换列表视图。

这是我的jsfiddle:http://jsfiddle.net/of73rdxa/2/ 如果取消注释第104行:

//self.chosenFriend(friend);

在我尝试引入sammy并从网址传递id之前,你可以看到我的工作方式。不幸的是,这不再是我需要的,因为我现在想要从url中的id而不是点击的事件中获取结果。

第112行的评论:

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

显示将起作用的格式的静态示例。不幸的是,我的getFriend方法没有以正确的格式返回数据以使其工作。

1 个答案:

答案 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();