构建过滤器
这是一个如何构建过滤器的示例
var filter = new Tridion.ContentManager.ListFilter();
filter.conditions.ItemTypes = 16 | 2; // folders and components
filter.conditions.Recursive = true;
filter.conditions.BasedOnSchema = "tcm:1-23-8,tcm:1-32-8".split(",");
filter.columns = Tridion.Constants.ColumnFilter.DEFAULT;
或者这个来自 General.js 的极其简单的案例:
var templateFilter = new Tridion.ContentManager.ListFilter({
conditions: { ItemTypes: [ itemType ] }
});
调用 WCF 方法
https://stackoverflow.com/a/9385975/209103 确实已经涵盖了您问题的第二部分,尽管我会在这里更具体一点。
诸如此类的 WCF/AJAX 调用是异步执行的,因为它们可能需要一些时间才能完成。虽然您通常会在右括号后的行上简单地处理调用的结果,但您不能在 AJAX 调用中执行此操作,因为该行将在函数完成之前执行。相反,您必须传入一个或多个回调函数,一旦函数完成就会被调用。
当我第一次开始研究这样的方法时,我通常只传入两个函数,这些函数会闯入我的浏览器的 JavaScript 调试器:
Tridion.Web.UI.ContentManager.WhereUsed.GetListUsedItems(
"tcm:1-23",
filter.conditions,
filter.columns,
new function() { console.log(arguments); debugger; },
new function() { console.log(arguments); debugger; }
);
因此,当对 TCM 服务器的(异步)HTTP 调用成功时调用第一个(匿名)函数,而当调用失败时调用第二个函数。在我上面链接的答案中,我们称它们为 onSuccess 和 onFailure 以使它们的性质更加明确。
在这种情况下,这两个函数都简单地编写了始终在 JavaScript 中传递的隐式 arguments 参数。然后它们会闯入您浏览器的 JavaScript 调试器,因此您可以进一步检查参数。