1

我试图创建一个函数,该函数通过使用 Kendo 的数据源传递的 ID 从远程源简单地返回记录。但是,当我从“dataSource.fetch”中设置“数据”变量时,“数据”对象仍然未定义。我如何从“dataSource.fetch”中设置“数据”对象,以便我可以返回它。

 function getUserById(id){

  var data;

  var dataSource = new kendo.data.DataSource({
    transport: {
      read: {
        url: "/data/users/",
        dataType: "jsonp"
      }
    },
    schema: {
      model: { id: "id_usr" }
    },
    serverFiltering: true,
    filter: { field: "id_usr", operator: "eq", value: id }
  });

  dataSource.fetch(function() {
    var dataItem = dataSource.get(id);
    if(dataItem){
      data = dataItem;
    }
  });

  return data;
}

user = getUserById("lrobinson");
name = user.fname+" "+user.lname;

这是一个示例http://jsbin.com/IKazEHe/2/edit?js,console

4

1 回答 1

1

发生这种情况是因为该fetch方法是异步的。只有在“/data/users/”服务完成加载后才会执行此操作。这就是为什么fetch接受仅在收到服务响应时才执行的回调的原因。

解决此问题的一种方法是通过设置async为使 ajax 请求同步false

var dataSource = new kendo.data.DataSource({
    transport: {
      read: {
        url: "/data/users/",
        dataType: "jsonp",
        async: false /* make it synchronous (basically JAX ;))
      }
    },
    schema: {
      model: { id: "id_usr" }
    },
    serverFiltering: true,
    filter: { field: "id_usr", operator: "eq", value: id }
  });
于 2013-10-15T15:41:29.913 回答