Knockout Refresh observableArray в html

Я работаю на 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
поделиться