如何将参数传递给 onQuerySucceeded 函数

How to pass an argument to onQuerySucceeded function

我正在尝试使用 JSOM 查询 SharePoint 列表,在 onQuerySucceeded 方法中我需要传递一个参数以根据自定义参数中的值执行一些相关操作。

我尝试按照下面的代码传递参数,但没有成功。

function onChildQuerySucceeded(sender, args, newArgument)

    function getChild(element) {
      var clientContext = new SP.ClientContext.get_current();
      var oList = clientContext.get_web().get_lists().getByTitle('ListName');
      var camlQuery = new SP.CamlQuery();
      camlQuery.set_viewXml("<View><Query><Where><Contains><FieldRef Name='Category1' Ascending='True' /><Value Type='Choice'>" + element + "</Value></Contains></Where></Query></View>");
      this.collListItem = oList.getItems(camlQuery);
      clientContext.load(collListItem);
      clientContext.executeQueryAsync(
        Function.createDelegate(this, onChildQuerySucceeded(element)),
        Function.createDelegate(this, onChildQueryFailed)
      );
    }

    function onChildQuerySucceeded(sender, args) {
      alert(element);
      var listItemInfo = "";
      var listItemEnumerator = collListItem.getEnumerator();
      while (listItemEnumerator.moveNext()) {
        oListItem = listItemEnumerator.get_current();
        console.log(oListItem.get_item('Title') + "Category: " + 
    oListItem.get_item('Category1'));
      }
    }

而不是传递现有函数

Function.createDelegate(this, onChildQuerySucceeded)

试试内联函数

var element = 'my object';
Function.createDelegate(this, function onChildQuerySucceeded(sender, args) { alert(element);})

我认为你需要调整一些东西。

您需要添加 "this" 关键字并提供函数所需的参数。

您在技术上覆盖了 "onQuerySucceeded" 的原始回调。

像这样的东西应该适合你。

 function getChild(element) {
  var clientContext = new SP.ClientContext.get_current();
  var oList = clientContext.get_web().get_lists().getByTitle('ListName');
  var camlQuery = new SP.CamlQuery();
  camlQuery.set_viewXml("<View><Query><Where><Contains><FieldRef Name='Category1' Ascending='True' /><Value Type='Choice'>" + element + "</Value></Contains></Where></Query></View>");
  this.collListItem = oList.getItems(camlQuery);
  clientContext.load(collListItem);
  clientContext.executeQueryAsync(
    Function.createDelegate(this, this.onChildQuerySucceeded(element)),
    Function.createDelegate(this, this.onChildQueryFailed)
  );
}

function onChildQuerySucceeded(element) {
  alert(element);
  var listItemInfo = "";
  var listItemEnumerator = collListItem.getEnumerator();
  while (listItemEnumerator.moveNext()) {
    oListItem = listItemEnumerator.get_current();
    console.log(oListItem.get_item('Title') + "Category: " + 
oListItem.get_item('Category1'));
  }
}

如果这不起作用,请将 "element" 变量设置为成功函数可以访问的全局变量,而不必费心传递它。