Привязка данных к наблюдаемым в приложении в стиле метро с помощью javascript

У меня проблемы с привязкой данных в приложении Metro javascript в Windows 8.

на *Сборка xxxx *

Я создаю значение, к которому хочу привязать

var someValue = WinJS.Binding.as({ primitive : 1 }); 

Я на самом деле поместил это в глобальную область, чтобы исключить вещи

Затем просто установите простой обратный вызов, чтобы обновлять это значение каждые 5 секунд.

setInterval(function () { someValue. primitive++ }, 5000);
WinJS.Binding.processAll();

это в готовой функции js-файла страницы

Затем в файле HTML просто простой тег h1

<h1 data-win-bind="innerText : someValue.primitive">Test</h1>

Когда эта страница запускается, она изначально выполняет привязку данных, поэтому тег h1 показывает 1, но больше ничего не показывает. Обратный вызов действительно срабатывает, и в любой момент я могу проверить someValue, и он выглядит правильно. Я пробовал использовать setProperty и updateProperty для объекта someValue, но это не имеет никакого значения.

Буду признателен за любые предложения. Спасибо!


person Michael Brearley    schedule 15.05.2012    source источник
comment
Я еще не знаю ответа, но просто хотел упомянуть, вы уверены, что должны публиковать что-либо о сборке на общественном форуме? Разве с ним не связано соглашение о неразглашении?   -  person louis.luo    schedule 15.05.2012
comment
Без понятия. Спасибо хоть. это заставляет его работать: HTML: <h1 data-win-bind="innerText : primitive">Test</h1> js: WinJS.Binding.processAll(document.body, someValue);   -  person Michael Brearley    schedule 15.05.2012


Ответы (1)


Кажется, это проблема с global. Я попробовал еще несколько вещей, и оказалось, что вы не можете привязать данные к объекту, имеющему глобальную область действия.

<h1 data-win-bind="innerText : variable">Test</h1>

«переменная» не может быть глобальной, если переменная, к которой вы привязываетесь, имеет глобальную область действия, которую она просто ломает.

но если вы просто используете пространство имен, скажем, variable.variable, тогда оно работает, но поскольку оно было помещено в пространство имен, вам нужно передать это как контекст данных.

WinJS.Binding.processAll (document.body, переменная)

Моя проблема заключалась в том, что у меня был объект ViewModel.Login, ViewModel.Basket, и я просто хотел связать ViewModel, а затем привязать соответствующие разделы к нужным им битам.

// ViewModel.Test.test.guidePrice = "£3,00";

работает <h1 data-win-bind="innerText : test.guidePrice">Test</h1> WinJS.Binding.processAll(document.getElementById('basketPrice'),ViewModel.Test);

не работает <h1 data-win-bind="innerText : Test.test.guidePrice">Test</h1> WinJS.Binding.processAll(document.getElementById('basketPrice'),ViewModel);

Надеюсь, это поможет любому с такими же / похожими проблемами!

person Michael Brearley    schedule 16.05.2012