Я работаю на Android с Jquery Mobile с PhoneGap, используя Knockout для загрузки данных.
Я правильно получаю данные и загружаю их на HTML-страницу в соответствии с каждой привязкой данных к тегам.
Когда я хочу обновить данные, он просто этого не делает. Он возвращает только HTML без связанных данных или выдает исключение dom not found.
Мой applyBinding происходит внутри события pagecreate страницы.
Я разместил простой пример, описывающий проблему на моем SkyDrive — http://sdrv.ms/LpUdLt Это публичный пример, воспроизводящий проблему. модель представления содержит массив, который содержит массив. обновляется случайными значениями. попытка перезагрузить страницу в jquery mobile с перезагрузкой страницы изменения с новыми данными, нажав кнопку панели навигации, завершается ошибкой объекта dom. Я согласен не с тем, что я не должен создавать экземпляр виртуальной машины на каждой создаваемой странице, просто не могу найти способ ее реализовать, чтобы данные были перерисованы в HTML.
//indexPage.js
var wAViewModelInst ;
var viewPageIndexContent;
$('#pageIndex').live('pagecreate', function (event) {
viewPageIndexContent = document.getElementById("pageIndexContent");
wAViewModelInst = new WAViewModel(true);
ko.applyBindings(wAViewModelInst, viewPageIndexContent);
waHeaderVM.refreshContentData = function () {
// wAViewModelInst.updateRowList();
// ko.cleanNode(viewPageIndexContent);
// viewPageIndexContent = document.getElementById("pageIndexContent");
//wAViewModelInst = new WAViewModel(true);
//ko.applyBindings(wAViewModelInst, viewPageIndexContent);
$.mobile.changePage("index.html", { allowSamePageTransition: true, reloadPage: true });
$.mobile.hidePageLoadingMsg();
}
}
//WAViewModel
self.WARowList = ko.observableArray();
self.updateRowList = function () {
self.WARowList(self.GetWA());
}
//tried the exteding
//ko.observableArray.fn.WARowListUpdate = function () {
// //create a sub-observable
// this.hasItems = ko.observable();
// //update it when the observableArray is updated
// this.subscribe(function (newValue) {
// this.hasItems(newValue && newValue.length ? true : false);
// }, this);
// //trigger change to initialize the value
// this.valueHasMutated();
// //support chaining by returning the array
// return this;
//};
Есть ли способ обновить html после первого рендеринга?
добавление html-кода:
и так далее ..
функция GetWA возвращает observableArray списка warow.
он работает в первый раз, когда возникает проблема с повторным рендерингом объекта dom.
элемент dom заражен ko и терпит неудачу..
Я попробовал ответ Луффи:
var lVM = new loginViewModel();
var footerViewModelLogin = {
IsOnline: ko.observable(globalContext.Network()),
IsSync: ko.observable(globalContext.Sync())
};
$('#login').live('pagecreate', function (event) {
viewLoginContent = document.getElementById("loginContent");
ko.applyBindingsToNode(viewLoginContent, lVM);
viewLoginFooter= document.getElementById("footerLogin");
ko.applyBindingsToNode(viewLoginFooter, footerViewModelLogin);
});
$('#login').live('pagehide', function (event, ui) {
$.mobile.hidePageLoadingMsg();
});
function loginViewModel() {
var self = this;
try {
self.userName = ko.observable("");
self.password = ko.observable("");
self.message = ko.observable("");
self.CleanGlobalContext = function () {
...
};
self.Validate = function () {
...
};
}
catch (e) {
if (IsDebug) alert("GlobalContext.prototype.SetMapOverlay " + e.message);
if (typeof (console) != 'undefined' && console) console.log("GlobalContext.prototype.SetMapOverlay " + e.message);
}
}
ko.applyBindings(lVM);
ko.applyBindings(footerViewModelLogin);
Нокаут терпит неудачу без предопределенного события элемента для привязки.
6
задан iNet 30 July 2018 в 01:55
поделиться
0 ответов
Другие вопросы по тегам: Похожие вопросы: