dojo / dijit ContentPane настройка содержимого - PullRequest
2 голосов
/ 08 марта 2010

Я пытаюсь добавить XML, полученный через dojo.XHRGet к dijit.layout.ContentPane. В Firefox (3.6) все работает нормально, но в Chrome я возвращаю «undefined» только в конкретном ContentPane.

Мой код выглядит примерно так:

var cp = dijit.byId("mapDetailsPane");
cp.destroyDescendants(); // there are some existing Widgets/content I want to clear
                         // and replace with the new content

var xhrData = {
  url : "getsomexml.php",
  handleAs: "xml",
  preventCache: true,
  failOk: true
};

var deferred = new dojo.xhrGet(xhrData);
deferred.addCallback(function(data) {
  console.log(data.firstChild); // get a DOM object in both Firebug 
                                // and Chrome Dev Tools
  cp.attr("content",data.firstChild); // get the XML appended to the doc in Firefox,
                                      // but "undefined" in Chrome
});

Поскольку в обоих браузерах я получаю верный Document объект, я знаю, что XHRGet работает нормально, но, кажется, есть некоторая разница в том, как устанавливается контент. Есть ли лучший способ обработки возвращаемых данных из запроса?

Был запрос на просмотр моего XML, так что вот его часть ...

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" 
 xmlns="http://www.w3.org/2000/svg" 
 xmlns:xlink="http://www.w3.org/1999/xlink" 
 version="1.1" width="672" height="1674">
 <defs>
   <style type="text/css">
     <![CDATA[ ...bunch of CSS...
     ]]>
   </style>
   <marker refX="0" refY="0" orient="auto" id="A00End" style="overflow: visible;">
   ...bunch more defs...
 </defs>
 <g id="endpoints">
   ...bunch of SVG with a some...
   <a xlink:href="javascript:gotoLogLine(16423,55);" xlink:type="simple">...more svg...</a>
 </g>
</svg>

Я выполнил вывод XML через валидатор WC3 для XML, чтобы убедиться, что он действителен. Как я уже говорил, работает в FireFox 3.6. Я попробовал это на Safari, и я получил то же «неопределенное», так что, похоже, оно связано с Webkit.

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Я не уверен, что моя недавняя встреча такая же, как и у вас. Я использую внешний javascript-файл, загруженный в раздел html-head, как пользовательский скрипт для проверки. Это мой код, который генерирует ошибку в IE, но это не генерирует ошибку в Firefox.

function loginCheck()
{
var username = dojo.byId("usernameBox").value;
var password = dojo.byId("passwordBox").value;
var loginForm = dijit.byId("loginDialog");
var mainPage = dijit.byId("entirePage");
var menuUrl = "";

if(username != 'admin' && username != 'user'){
    alert('Incorrect username');
} else {
    if(password != '1234') {
        alert('Incorrect password');
    } else {
        loginForm.hide();
        dojo.style(mainPage.domNode, {visibility:"visible"});
        dojo.doc.title = dojo.doc.title + " : Signed in as [" + username + "]";

        if(username == 'user'){
            menuUrl = "../data/userMenu.json";
        } else if(username == 'admin') {
            menuUrl = "../data/adminMenu.json";
        }

        var treeStore = new dojo.data.ItemFileReadStore({
            url : menuUrl
        });

        var treeModel = new dijit.tree.ForestStoreModel({
            store : treeStore,
            query : {
                "type" : "category"
            },
            childrenAttrs : ["children"]

        });

        var naviTree = new dijit.Tree({
            model : treeModel,
            showRoot : false,
            autoExpand : true
        }, "naviPane");

        dojo.connect(naviTree, "onClick", function(item){
                var targetPage = item.link;

                var targetPane = dijit.byId("centerPane");
                console.log(targetPage);
                **targetPane.attr('href',targetPage);**
                console.log("redirect success.");
        });
    }
}

В строке **. IE возвращает эту ошибку.

Сведения об ошибке веб-страницы

Пользовательский агент: Mozilla / 4.0 (совместимый; MSIE 8.0; Windows NT 6.1; Trident / 4.0; SLCC2; .NET> CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; ПК Media Center 6.0; InfoPath.2;> Планшетный ПК 2.0; .NET4.0C; .NET4.0E; AskTB5.6) Отметка времени: вторник, 19 октября 2010 г., 08:24:35 UTC

Сообщение: объект не поддерживает это свойство или метод Линия: 49 Чар: 21 Код: 0 URI: http://localhost:8080/TestESarabun/script/loginCheck.js

После того, как я проследил в библиотеку dojo и остановился на файле dojo / _base / xhr.js с этим фрагментом кода.

dojo._ioAddQueryToUrl = function (/ * dojo .__ IoCallbackArgs * / ioArgs) { // summary: Добавляет параметры запроса, обнаруженные конструкцией отложенного ввода-вывода в URL. // Используйте это только для операций, которые по сути являются операциями типа GET. если (ioArgs.query.length) { ioArgs.url + = (ioArgs.url.indexOf ("?") == -1? "?": "&") + ioArgs.query; ioArgs.query = null; }
}

Мое грубое решение - просто закомментировать строку «indexOf», а затем мое веб-приложение запустится без ошибок. Во всяком случае, я не уверен, что эта линия собирается делать?

1 голос
/ 16 марта 2010

Работает ли cp.containerNode.appendChild (data.firstChild)? Рассматривая ContentPane как универсальный контейнер, который может принимать произвольные узлы XML, может потребоваться слишком много этого. Его основной вариант использования - и всегда был - внедрение HTML. Не сказать, что это не может работать, но это угловой случай, который не очень хорошо изучен в этом виджете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...