Есть два набора свойств, к которым вы можете привязаться.
Во-первых, это свойства, поддерживаемые в DOM каждым типом элемента. Так, например, для элемента img
вы можете привязать свойство src
, чтобы установить отображаемое изображение. Для элемента input
вы можете привязать к свойству value
. Полный список элементов HTML, доступных для приложений Metro, можно просмотреть здесь.
Второй набор свойств доступен, если вы применили элемент управления пользовательского интерфейса WinJS к элементу (что обычно делается с помощью атрибута data-win-control
. Вы можете установить свойства, определенные каждым элементом управления, с помощью свойства winControl
, которое добавляется при применении элемента управления. Например, если вы хотите привязать свойство itemTemplate
к ListView
, у вас будет такая разметка:
<div id="list" data-win-control="WinJS.UI.ListView"
data-win-bind="winControl.itemTemplate: myValue"></div>
Вы можете использовать ту же технику для установки обработчиков событий. Определите функции обратного вызова как часть вашего источника данных следующим образом:
var dataSource = {
myClickHandler: function (e) { console.log("Click!") }
}
А затем привязать к свойству on*
, которое соответствует интересующему вас событию:
<button data-win-bind="onclick: myClickHandler">Press Me</button>
Добавлять и удалять отдельные классы гораздо сложнее. Я считаю, что проще всего это сделать с помощью привязки на основе кода. Создайте наблюдаемое свойство в вашем источнике данных следующим образом:
var dataSource = {
myClickHandler: function (e) { console.log("Click") },
classes: WinJS.Binding.as({
myFirstClass: true,
mySecondClass: false,
})
}
А затем используйте метод привязки для наблюдаемого объекта, чтобы получать уведомления об изменении значения и применять/удалять класс следующим образом:
dataSource.classes.bind("myFirstClass", function (newValue) {
var elem = document.getElementById("myId");
if (newValue) {
WinJS.Utilities.addClass(elem, "myFirstClass");
} else {
WinJS.Utilities.removeClass(elem, "myFirstClass");
}
});
Вы можете связать классы декларативно, но вам нужно установить все классы за один раз, что редко бывает полезным. Если вы хотите использовать этот подход, вы привязываете свойство className
к элементу.
person
Adam Freeman
schedule
12.06.2012