Ро то get get

Я создал класс JS для заполнения данных вида списка SG / Folder, когда элементы изменены. ( В соответствии с подходом Хайме) Все работает отлично, когда я работаю над элементами в публикации, которую они создали.

Пример: Я открываю компонент или страницу, и пользовательский столбец locked by сразу же обновляет и показывает мое имя пользователя.

Išsamiau, prašome įvesti savo pasirinkimą, pasidarykite čia, jei norite sužinoti daugiau informacijos apie tokius viešbučius, tokius kaip: „Išvykimas“, „о получаю окно с вопросом, я получаю окно с вопросом“. Если я хочу изменить родительское окно код не работает. Я еще не совсем понял это с начальной отладкой. „Chrome“, „похоже, проглотил ошибку“, „Firefox“ дает мне загадочную информацию:

Atsakyti: 2012-06-22 03:42:54

Ошибка: неперехваченное исключение: [Исключение ... "Код возврата компонента: 0x80004002 (NS_NOINTERFACE) [nsIWebProgress.DOMWindow]" nsresult: "0x80004002 (NS_NOINTERFACE)" местоположение: "JS rėmas :: chrome: // naršyklė / turinys / Tabbrowser. xml :: строка 545 "данные: нет]

Есть ли у кого-нибудь идеи? Я попытаюсь позже опубликовать код ...

Код из PageEx.js:

 // reloads the list view for the given id (used in list view data refresh when JS cant get the required data without reloading) MyCompany.Tridion.RTFExtensions.Utilities.reloadListView = function (listTcmId) { var registry = $models.getListsRegistry(); for(var key in registry) { var entry = $models.getItem(registry[key]); if (entry  entry.getParentId() == listTcmId) { entry.unload(); return true; } } return false; }  MyCompany.Tridion.RTFExtensions.Utilities.setDataFromList = function (node, parentId, timeStamp, itemClicked) { var p = itemClicked.properties; if (!timeStamp || timeStamp > itemClicked.getTimeStamp()) { var tmp; if (tmp = node.getAttribute('Version')) { p.versionNumberString = tmp; p.previousVersion = tmp; } if (tmp = node.getAttribute('ModifiedBy')) { p.modifiedBy = tmp; p.initialModifierUserName = tmp; } if (tmp = node.getAttribute('LockedBy')) { p.lockedBy = tmp; } if (tmp = node.getAttribute('ApprovalStatus')) { p.approvalStatus = tmp; p.previousApprovalStatus = tmp; } if (tmp = node.getAttribute('PublishDate')) { p.publishDate = tmp; } if (p.customModifiedDate === undefined) { if (tmp = node.getAttribute('Modified')) { p.customModifiedDate = tmp; } } } }  MyCompany.Tridion.RTFExtensions.Utilities.getListItemXmlAttributes = function (customAttributes, listViewObject,attribs) { var p = listViewObject.properties; $extUtils.getListViewItemLockedByName(p,listViewObject); if (customAttributes) { for (var attr in customAttributes) { attribs[attr] = customAttributes[attr]; } } attribs["Version"] = $extUtils.getListViewItemUpdatedVersion(p,listViewObject); //modified name has to come after the version update... $extUtils.getListViewItemModifiedByName(p,listViewObject); attribs["ApprovalStatus"] = $extUtils.getListViewItemApprovalStatus(p,listViewObject); attribs["PublishDate"] = $extUtils.getListViewItemPublishDate(p,listViewObject); //set default values if (p.versionNumberString != undefined) { var iResult = p.versionNumberString.localeCompare(p.previousVersion); if (p.previousVersion === undefined || iResult > 0) { //it been updated! p.previousVersion = p.versionNumberString; p.previousApprovalStatus = p.approvalStatus; //also need to update modified date p.customModifiedDate = $extUtils.getListViewItemUpdatedModifiedDate(p,listViewObject); p.initialModifierUserName = p.modifiedBy; } } attribs["Modified"] = p.customModifiedDate; attribs["LockedBy"] = p.lockedBy; attribs["ModifiedBy"] = p.modifiedBy; };  MyCompany.Tridion.RTFExtensions.Utilities.getListViewItemModifiedByName = function (p,listViewObject) { var p = listViewObject.properties; var xmlDoc = listViewObject.getXmlDocument(); if (xmlDoc) { //modifier should always exist... var modifierId = $xml.getInnerText(xmlDoc, "/tcm:*/tcm:Info/tcm:VersionInfo/tcm:Revisor/@xlink:title"); if (modifierId != undefined) { var u = Tridion.UI.UserSettings.getJsonUserSettings(true); if (modifierId == u.User.Data.Name) { var strDescription = u.User.Data.Description.split('('); p.modifiedBy = strDescription[0]; return; } else { //we're in trouble... //let hope it the initial modifier we had... if (p.previousVersion == p.versionNumberString) { //whew... p.modifiedBy = p.initialModifierUserName; return; } if (!$extUtils.reloadListView(listViewObject.getOrganizationalItemId())) { //hrm. something failed on the reload? not sure what else to do: p.modifiedBy = modifierId; } } } else { //shouldn't ever happen. p.modifiedBy = ""; return; } } };  MyCompany.Tridion.RTFExtensions.Utilities.getListViewItemLockedByName = function (p,listViewObject) { var xmlDoc = listViewObject.getXmlDocument(); if (xmlDoc) { //this will be user id. no sense getting tcmid... can't look it up without async call var lockedUserId = $xml.getInnerText(xmlDoc, "/tcm:*/tcm:Info/tcm:VersionInfo/tcm:ItemLock/tcm:User/@xlink:title"); if (lockedUserId != undefined) { //see if it the current user. most likely... var u = Tridion.UI.UserSettings.getJsonUserSettings(true); if (lockedUserId == u.User.Data.Name) { var strDescription = u.User.Data.Description.split('('); p.lockedBy = strDescription[0]; return; } //it not the current user. no synch way to do what we want, plus the JS call doesn't get the workflow version anyway. refresh the parent view if (!$extUtils.reloadListView(listViewObject.getOrganizationalItemId())) { //hrm. something failed on the reload? not sure what else to do: p.lockedBy = lockedUserId; } } else { //clear it out since there no lock owner p.lockedBy = ""; } } };  MyCompany.Tridion.RTFExtensions.Utilities.getListViewItemApprovalStatus = function (p,listViewObject) { //check if the item has actually been modified. if (p.versionNumberString != p.previousVersion) { var xmlDoc = listViewObject.getXmlDocument(); if (xmlDoc) { p.approvalStatus = $xml.getInnerText(xmlDoc, "/tcm:*/tcm:Info/tcm:Data/tcm:ApprovalStatus/@xlink:title"); } } else { p.approvalStatus = p.previousApprovalStatus; } if (p.approvalStatus === undefined || p.approvalStatus.toUpperCase() == 'UNAPPROVED') { var foo = p.approvalStatus; p.approvalStatus = 'WIP'; } return p.approvalStatus; };  MyCompany.Tridion.RTFExtensions.Utilities.getListViewItemPublishDate = function (p,listViewObject) { //modification won't alter publish date. var p = listViewObject.properties; return p.publishDate; };  MyCompany.Tridion.RTFExtensions.Utilities.getListViewItemUpdatedModifiedDate = function (p,listViewObject) { var xmlDoc = listViewObject.getXmlDocument(); var modDate = $xml.getInnerText(xmlDoc, "/tcm:*/tcm:Info/tcm:VersionInfo/tcm:RevisionDate"); return modDate; }  MyCompany.Tridion.RTFExtensions.Utilities.getListViewItemUpdatedVersion = function (p,listViewObject) { var p = listViewObject.properties; var xmlDoc = listViewObject.getXmlDocument(); var newVersionString = undefined; if (xmlDoc) { newVersionString = String.format("{0}.{1}", $xml.getInnerText(xmlDoc, "/tcm:*/tcm:Info/tcm:VersionInfo/tcm:Version"), $xml.getInnerText(xmlDoc, "/tcm:*/tcm:Info/tcm:VersionInfo/tcm:Revision")); } if (newVersionString != undefined) { //want to ensure we're getting a LATER version than we had (because it will try to load the non-workflow version afterwards... var iResult = newVersionString.localeCompare(p.previousVersion); if (p.previousVersion === undefined || iResult > 0) { p.versionNumberString = newVersionString; } else { p.versionNumberString = p.previousVersion; } } else { p.versionNumberString = p.previousVersion; } return p.versionNumberString; }; function launchPopup(winURL, winName, winFeatures, winObj) { // this will hold our opened window var theWin; // first check to see if the window already exists if (winObj != null) { // the window has already been created, but did the user close it? // if so, then reopen it. Otherwise make it the active window. if (!winObj.closed) { winObj.focus(); return winObj; } // otherwise fall through to the code below to re-open the window } // if we get here, then the window hasn't been created yet, or it // was closed by the user. theWin = window.open(winURL, winName, winFeatures); return theWin; } var $extUtils = MyCompany.Tridion.RTFExtensions.Utilities; 
360
23 июня '12 в 1:58 2012-06-23 01:58 задан Warner Soditus 23 июня '12 в 1:58 2012-06-23 01:58
ответ 1 ответ

[Исключение ... "Компонент возвращает код отказа: 0x80004002 (NS_NOINTERFACE) [nsIWebProgress.DOMWindow]"

Это означает, что не было окна, назначенного объекту nsIWebProgress . Поэтому он не может отображать данные.

nsresult: "0x80004002 (NS_NOINTERFACE)" местоположение: "JS rėmas :: chrome: //browser/content/tabbrowser.xml :: строка 545" duomenys: ne]

Это говорит вам, какой файл связан с этой ошибкой. и на какой строке он ошибался.

Но реальным ключом является ошибка NS_NOINTERFACE. Это означает, что интерфейс не был зарегистрирован.

Вы используете Type.enableInterface() . Это специальный метод, который вы объявляете где-то еще? Я этого не вижу. Вы можете изменить это на .registerInterface()

Смотрите эту ссылку Тип класса и Tipas.

2
13 мая '15 в 8:48 2015-05-13 08:48 ответ дан Tech Savant 13 мая '15 в 8:48 2015-05-13 08:48

Другие вопросы по меткам или вопрос