我为 SDL Tridion 2011 SP1 编写了 GUI 扩展。 GUI 由一个额外的功能区按钮和保存组件时触发的事件处理程序组成。
我的事件处理程序注册如下:
PowerTools.Commands.ItemCommenting.prototype._execute = function (selection) {
var item = $display.getItem();
$evt.addEventHandler(item, "save", this.getDelegate(this._onItemSaved));
$cme.getCommand("SaveClose")._execute(selection);
};
事件处理程序如下所示:
PowerTools.Commands.ItemCommenting.prototype._onItemSaved = function (eventitem) {
var comment = prompt("Please enter a comment", "");
$messages.registerNotification("Saving user comments...");
var commentitemid = eventitem.source.getId();
var commenterid = eventitem.source.getCreatorId();
var commenter = $tcm.getItem(commenterid);
var commentername = commenter.getDescription();
var commentdate = eventitem.source.getLastModifiedDate();
var commentversion = eventitem.source.getVersion();
//Call the service to update
PowerTools.Model.Services.AppDataServices.Append("ext:ItemCommenting", commentitemid, "<comment><user>" + commenterid + "</user><message>" + comment + "</message><datetime>" + commentdate + "</datetime><version>" + commentversion + "</version></comment>", null, null, null, false);
};
这工作正常,除了变量commentername
始终是未定义的。是否有更好的方法来获取用户的名称和描述?
另外,有谁知道返回的值是否为eventitem.source.getCreatorId()
实际上是修订者还是创建该项目的人?
我在安圭拉通常遵循这种方法:
- use
$models.getItem(item Id)
加载对象,从某人(@puf?)那里听说这是被缓存的。
- 检查 object.isLoaded() 是否存在,如果是,则执行我的事件处理程序
- 如果对象未加载,则监听该事件
这一切都归结为这样的事情:
p.keyword = $models.getItem(p.keywordUri);
if (p.keyword.isLoaded()) {
this._onReleaseKeywordLoaded();
} else {
$evt.addEventHandler(p.keyword, "load", this.getDelegate(this._onReleaseKeywordLoaded));
p.keyword.load();
}
然后,您可以从事件处理程序调用模型的 Web 服务,因为您确定届时将加载该对象。
在当前的代码中,您可能尝试在加载对象之前读取描述,因此未定义。我倾向于将多个函数需要的变量放在this.properties
var (p
在我的示例中)然后在每个函数的开头执行类似的操作:
var p = this.properties;
var whatever = p.whatever;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)