AdaptiveCards可扩展性允许开发者通过自定义扩展来增强AdaptiveCards的功能。下面是一个示例,演示如何使用自定义扩展来添加新的包含列表项目的类型。
// 注册包含列表扩展
AdaptiveCards.AdaptiveCard.onProcessElement = function (element, json) {
if (element.type == 'ContainingList') {
var containingList = new AdaptiveCards.ContainingList();
// 解析包含列表的属性
if (json.items) {
json.items.forEach(function (itemJson) {
var cardElement = AdaptiveCards.AdaptiveCard.elementTypeRegistry.createInstance(itemJson.type);
if (cardElement) {
containingList.addItem(cardElement);
if (cardElement.processProperties) {
cardElement.processProperties(itemJson);
}
} else {
console.warn('Unsupported card element type: ' + itemJson.type);
}
});
}
return containingList;
}
}
// 定义包含列表类型
AdaptiveCards.ContainingList = function () {
AdaptiveCards.Container.call(this);
this.type = 'ContainingList';
this.items = [];
}
AdaptiveCards.ContainingList.prototype = Object.create(AdaptiveCards.Container.prototype);
AdaptiveCards.ContainingList.prototype.constructor = AdaptiveCards.ContainingList;
AdaptiveCards.ContainingList.prototype.addItem = function (item) {
this.items.push(item);
item.setParent(this);
}
AdaptiveCards.ContainingList.prototype.render = function () {
var renderedChildren = [];
for (var i = 0; i < this.items.length; i++) {
renderedChildren.push(this.items[i].render());
}
var listElement = document.createElement('ul');
listElement.className = 'ac-container';
renderedChildren.forEach(function (renderedChild) {
var listItemElement = document.createElement('li');
listItemElement.appendChild(renderedChild);
listElement.appendChild(listItemElement);
});
return listElement;
};
在上面的示例中,我们创建了一个名为ContainingList的新类型,它继承了Container类型的所有方法和属性,并添加了一个名为addItem的新方法,该方法向ContainingList对象中添加新项目。我们还定义了一个onProcessElement方法,该方法在解析AdaptiveCards JSON时被调用,并允许我们识别包含列表元素。如果我们找到了包含列表元素,我们将使用我们新创建的ContainingList类型创建一个新对象,并将包含列表中的项添加到该对象中,而不是将它们添加到默认