Я новичок в программировании на XUL, и я многому научился, но мне трудно разобраться в том, как запустить уведомление наблюдателя, и у меня есть слушатель в другом окне XUL, чтобы получить строковое значение из функции наблюдателя ( наблюдатель передает строковый параметр в другое окно XUL).
Это мой файл xil.
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window title="ContactMatrix;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="fire.js" />
<hbox>
<textbox type="search" oncommand="SearchKeyword(this)"/>
</hbox>
<tree editable="false" id="my-tree" flex="1" seltype="cell" onclick="onTreeClicked(event)"
datasources="file://C:/mercredi.xml" ref="*" querytype="xml" enableColumnDrag="true" hidecolumnpicker="false" >
</tree>
</window>
Это мой сценарий:
function SearchKeyword(oElem)
{
var filter = document.getElementById("filter");
filter.setAttribute("value", oElem.value);
document.getElementById("my-tree").builder.rebuild();
}
function onTreeClicked(event){
var tree = document.getElementById("my-tree");
var tbo = tree.treeBoxObject;
// get the row, col and child element at the point
var row = { }, col = { }, child = { };
tbo.getCellAt(event.clientX, event.clientY, row, col, child);
var cellText = tree.view.getCellText(row.value, col.value);
alert(cellText);
observe();
}
XPCOMUtils.defineLazyServiceGetter(this, "obsService", "@mozilla.org/observer-service;1", "nsIObserverService");
obsService.notifyObservers(null, "xulschoolhello-test-topic", cellText);
let observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(testObserver, "xulschoolhello-test-topic", false);
let testObserver = {
observe : function(aSubject, aTopic, cellText) {
if (aTopic == "xulschoolhello-test-topic") {
window.alert("Data received: " + cellText); //cellText=aData
var textboxElement = document.getElementByID("ali");
textboxElement.value = cellText; // from the notification
}
}
}
var yourAddonObject = {
obsService: Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService),
register: function()
{
this.obsService.addObserver(this, "xulschoolhello-test-topic", false);
}
}
function DisplayContacts()
{
alert('opening file fire');
var windowObjectReference = window.openDialog("chrome://hello/content/fire.xul","fire");
}
Это мой текстовый файл XUL. Где я хочу запустить значения ячеек дерева xul в текстовое поле в этом файле.
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window title="Subjects import"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
<script type="application/x-javascript" src="fire.js" />
<groupbox>
<caption>Subject(s)</caption>
<hbox>
<label value="Subjects"/>
<textbox id='ali' value=""/>
<button label="Contacts" onclick="DisplayContacts();"/>
</hbox>
</groupbox>
</window>
У меня проблема с запуском значений ячеек дерева в другое окно XUL. Из моего XUL-файла с текстовым полем я могу открыть свой XUL-файл дерева, и когда я нажимаю на ячейку дерева, я могу получить значения этой ячейки дерева в виде предупреждающего сообщения. После этого мой скрипт не работает.
По сути, здесь, когда я нажимаю на ячейку дерева, выбранные значения ячейки дерева должны открываться в моем текстовом поле в другом окне XUl.
Кто-нибудь, пожалуйста, помогите мне решить эту проблему. Здесь я разделил файл сценария и файлы XUL.
С этого сайта я взял все возможные сценарии. https://developer.mozilla.org/en/XUL_School/Observer_Notifications
Спасибо.
Примечание: я обновил свой вопрос в том же посте здесь.