我正在尝试使用JavaScript从术语库中检索术语,此代码可以很好地工作:
获取单个分类法字段的标签:

var fieldValue = item.get_item("FieldName");
var fieldLabel = fieldValue.Label;


我有一个问题要检索多值分类法字段的标签?
我已经试过了

var fieldValue = item.get_item("FieldName");
var taxEnumerator = fieldValue.getEnumerator();
while(taxEnumerator.moveNext()){
    var currentTerm = taxEnumerator.get_current();
    var label = currentTerm.Label;
    // do something with the label here
}


但这不起作用

最佳答案

因为未加载sp.taxonomy.js库,并且在这种情况下,分类法字段值作为“轻量级”对象(不是SP.Taxonomy.TaxonomyFieldValueCollection object类型)返回,所以很可能出现此错误。

选项1(推荐):使用sp.taxonomy库获取多个分类法字段值

首先,我会推荐这种方法,因为SP.Taxonomy命名空间不仅提供了一种用于处理分类法字段值的标准方法,而且还提供了一种通过JSOM使用Managed Metadata API的方法。

以下示例显示了如何:


确保已加载sp.taxonomy.js库
获取多个分类法字段值,该值代表
SP.Taxonomy.TaxonomyFieldValueCollection object


例:

SP.SOD.registerSod('sp.taxonomy.js', SP.Utilities.Utility.getLayoutsPageUrl('sp.taxonomy.js'));
SP.SOD.executeFunc('sp.taxonomy.js', 'SP.Taxonomy.TaxonomySession', function () {

var ctx = SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getByTitle(listTitle);
var item = list.getItemById(itemId);
ctx.load(item);

ctx.executeQueryAsync(
   function(){

      var fieldVal = item.get_item(fieldName);

      for(var i = 0; i < fieldVal.get_count(); i++) {
         var label = fieldVal.get_item(i).get_label();
         var guid = fieldVal.get_item(i).get_termGuid();
         //...
      }
   },
   function(sender,args){
       console.log(args.get_message());
   });


});


选项2:在未加载sp.taxonomy.js库的情况下获取多个分类法字段值

当未加载sp.taxonomy库时,仍可以通过_Child_Items_属性检索分类法字段值,如下所示:

var ctx = SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getByTitle(listTitle);
var item = list.getItemById(itemId);
ctx.load(item);

ctx.executeQueryAsync(
   function(){

      var fieldVal = item.get_item(fieldName)._Child_Items_;
      for(var i = 0; i < fieldVal.length; i++) {
         var label = fieldVal[i].Label;
         var guid = fieldVal[i].TermGuid;
         //...
      }
   },
   function(sender,args){
       console.log(args.get_message());
   });

10-05 20:27