Почему готовая функция в моих настройках не попала?
Я реализовал SettingsFlyout. С точки зрения этой всплывающей подсказки, мое приложение собирает некоторую информацию от пользователя (firsname) и хочет сохранить ее в настройках роуминга. Эта информация сохраняется, когда пользователь нажимает кнопку в представлении настроек, и извлекается в событии beforeShow для всплывающего окна. Эти два события настраиваются в функции готовности самой SettingsFlyout, но по какой-то причине эта функция готовности не вызывается. В результате события не являются результатом и не были вызваны. Позвольте мне показать вам код сейчас. Вот что у меня в default.html
app.onsettings = function (e) {
e.detail.applicationcommands = {
"test": {
href: "/pages/settings/test/test.html",
title: "Test"
}
}
WinJS.UI.SettingsFlyout.populateSettings(e);
};
Вот сам test.html.
<!DOCTYPE html>
<html>
<head>
<title></title>
<link href="/pages/settings/test/test.css" rel="stylesheet" />
</head>
<body>
<div
data-win-control="WinJS.UI.SettingsFlyout" data-win-options="{settingsCommandId:'test', width:'narrow'}">
<div class="win-header">
<div class="win-label">test</div>
</div>
<div class="win-content">
First Name: <input id="firstname" />
<br />
<input type="submit" value="Save" />
</div>
</div>
</body>
</html>
Вот файл test.js.
(function () {
"use strict";
WinJS.UI.Pages.define("/pages/settings/test/test.html", {
// This function is called whenever a user navigates to this page. It
// populates the page elements with the app's data.
ready: function (element, options) {
// TODO: Initialize the page here.
var roamingSettings = Windows.Storage.ApplicationData.current.roamingSettings;
var divtest = document.getElementById("test").winControl;
var firstname = document.getElementById("firstname");
document.getElementById("submit").onclick = function (e) {
//alert('hi');
roamingSettings.values["firstname"] = firstname.value;
}
divtest.addEventListener("beforeshow", function () {
firstname.value = roamingSettings.values["firstname"];
});
},
unload: function () {
// TODO: Respond to navigations away from this page.
},
updateLayout: function (element, viewState, lastViewState) {
/// <param name="element" domElement="true" />
// TODO: Respond to changes in viewState.
}
});
})();
Что я тут делаю не так и как я могу вызывать готовую функцию?
1 ответ
Похоже <script>
тег для test.js
отсутствует в test.html
<head>
<title></title>
<link href="/pages/settings/test/test.css" rel="stylesheet" />
<script src="/pages/settings/test/test.js"></script>
</head>
С уважением, комментарии. HTML отсутствует id
атрибуты для этих элементов. следовательно, getElementById
терпит неудачу. Было сказано, что document.getElementById()
это не обязательно лучший способ достичь этого. рассмотреть возможность использования class
атрибут в HTML и element.querySelector('.myclass')
который охватывает запрос к корневому элементу страницы; также удалена область коллизии идентификаторов по страницам.
<div id="test"
data-win-control="WinJS.UI.SettingsFlyout" data-win- options="{settingsCommandId:'test', width:'narrow'}">
<div class="win-header">
<div class="win-label">test</div>
</div>
<div class="win-content">
First Name: <input id="firstname" />
<br />
<input id='submit' type="submit" value="Save"