1

KendoのdataSourceを使用して渡されたIDによって、リモートソースからレコードを単純に返す関数を作成しようとしています。ただし、「dataSource.fetch」内から「data」変数を設定すると、「data」オブジェクトは未定義のままです。「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これが、サービスからの応答が受信された場合にのみ実行されるコールバックを受け入れる理由です。

これに対処する 1 つの方法は、次のように設定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 に答える