我正在尝试使用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
}
但这不管用
发布于 2016-10-05 08:33:14
很可能是因为没有加载sp.taxonomy.js
库,并且在这种情况下,分类法字段值被返回为“轻量级”对象(而不是SP.Taxonomy.TaxonomyFieldValueCollection对象类型的),所以很可能会出现此错误。
sp.taxonomy
选项1(建议):使用库获取多个分类法字段值
首先,我建议采用这种方法,因为SP.Taxonomy
命名空间不仅提供了处理分类法字段值的标准方法,而且还提供了通过JSOM处理托管元数据API的方法。
下面的示例演示如何:
示例:
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());
});
});
sp.taxonomy.js
选项2:获得多个分类法字段值而没有加载库的
当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());
});
https://stackoverflow.com/questions/39704871
复制相似问题