-1

我有一个带有远程数据源的表。在一个单元格中,我得到了用户 ID。因为我想显示用户名而不是用户 ID,所以我制作了一个自定义模板函数:

function getUserName(pmcreator){
    var user = '';
    var data = ''
    ds_userList.fetch(function(){
        var data = this.data();
        for(var i = 0, length = data.length; i < length; i++){
            if(data[i].uID == pmcreator){
                console.log(data[i].uLastname)
                user = data[i].uLastname
            }
        }
    });
    return user
}

但它不能正常工作,单元格保持空白。我没有收到任何错误,但我看到在填写网格之前未完成获取用户名的远程请求。我以为 fetch 的自定义函数正在等待结果返回,但似乎并非如此。

任何想法?我发现了数以千计的示例,但都包含静态本地数据。我需要一个同时具有远程、网格内容和模板数据的设备。

4

1 回答 1

0

这可能是因为当您调用 dataSource.fetch 时,它会触发一个异步函数,这会导致运行模板的线程继续运行。根据 kendo,您需要返回一个控件,然后在回调中设置该控件的内容。

使用 Northwind 类别的快速示例...这是模板函数

function getDetails(e) {
 $.getJSON("http://services.odata.org/V3/Northwind/Northwind.svc/Categories", null, function(data) {
    var category = data.value.filter(function(item, i) {
      return item.CategoryID === e.CategoryID;
    });
    $("#async_" + e.CategoryID).html(category[0].Description);
  });

   return "<div id='async_" + e.CategoryID + "'></div>";
}

http://jsbin.com/ODENUBe/2/edit

当我试图获取数据源时,我不断收到一个递归错误最大调用堆栈,所以我切换到了一个简单的 getJSON,但它的工作方式应该几乎相同。

于 2014-01-17T15:21:34.513 回答