Nano Hash - криптовалюты, майнинг, программирование

winjs appbar.wincontrol имеет значение null

Я создаю приложение Windows 8 HTML5 и внедряю панель приложений. Когда я получаю доступ к appbar.winControl, он всегда равен нулю. Поэтому, если, например, я пишу appbar.winControl.show(), я получаю исключение, утверждающее, что winControl имеет значение null.

Что я сделал, так это создал приложение с фиксированным макетом. Ничего не делая, я добавил в тело документа следующую разметку:

<body>
<div id="appbar" data-win-control="WinJS.UI.AppBar" aria-label="Command Bar">
    <button id="btnBoardSizeUp" data-win-control="WinJS.UI.AppBarCommand" data-win-options="{label:'Larger', icon:'zoomout', section:'global', tooltip:'Increase the board size'}" />
    <button id="btnBoardSizeDown" data-win-control="WinJS.UI.AppBarCommand" data-win-options="{label:'Smaller', icon:'zoomin', section:'global', tooltip:'Decrease the board size'}" />
    <button id="btnAbortGame" data-win-control="WinJS.UI.AppBarCommand" data-win-options="{label:'Abort', icon:'cancel', section:'selection', tooltip:'Abort the current game'}" />
</div>

<script type="text/javascript">
    var appbar = document.getElementById("appbar");
    var winControl = appbar.winControl;
    winControl.show();
</script>

The line winControl.show() produces the following error:

0x800a138f — ошибка выполнения JavaScript: невозможно получить свойство «show» неопределенной или нулевой ссылки

Насколько я вижу, я правильно реализовал панель приложений на странице, поэтому она должна работать. Любая идея, что происходит не так?


Ответы:


1

Элементы управления страницами еще не инициализированы, а скрипт выполняется до этого.

Этот код можно разместить в двух местах. либо в

// if the app bar is part of default.html, appbar show can be put in default.js
// default.js already have a call to WinJS.UI.processAll under activated event handler
WinJS.UI.processAll().then(function ()
{
    appbar.winControl.show();
});

or

// if the appbar is part of mypage.html, need to have code like this in mypage.js
WinJS.UI.Pages.define('/pages/mypage/mypage.html',
    {
         ready: function onready(element, options)
         {
             appbar.winControl.show();
         }
    }
13.04.2013
  • Спасибо @Сушил. Я не смог заставить работать первый пример — вместо этого я получил сообщение об ошибке, говорящее о том, что функция processAll не существует. Но второй пример работал отлично, так что моя проблема решена. 13.04.2013
  • Я должен исправить это. Теперь я могу заставить оба примера работать. Я не знаю, почему первый пример не работал раньше, но это могла быть опечатка с моей стороны, которую я просто не мог заметить. В любом случае, еще раз спасибо, @Sushil 13.04.2013

  • 2

    Всякий раз, когда вы используете элемент управления winjs (div с атрибутом data-win-control), чтобы указать нужный элемент управления. Вы также должны вызвать функцию WinJS.UI.processAll в коде JavaScript. WinJS.UI.processAll анализирует вашу разметку и создает экземпляры любых найденных элементов управления библиотекой Windows для JavaScript.

    1. Если вы не используете шаблон пустого приложения или
      добавляете элемент управления на страницу, которую создали сами, вам может
      понадобиться добавить вызов WinJS.UI.processAll.
    2. Если вы добавили элемент управления на домашнюю страницу вашего приложения (обычно это файл default.html), добавьте вызов WinJS.UI.processAll в обработчик события onactivated, как показано в предыдущем примере.
    3. Если вы добавили элемент управления в элемент управления Page, вам не нужно добавлять вызов WinJS.UI.processAll, поскольку элемент управления Page делает это за вас автоматически.
    4. Если вы добавили элемент управления на другую страницу, которая не является домашней страницей вашего приложения, обработайте событие DOMContentLoaded и используйте обработчик для вызова WinJS.UI.processAll.

    инициализировать функцию () {

    WinJS.UI.processAll();
    

    }

    document.addEventListener("DOMContentLoaded", initialize(), false);

    15.07.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..