Как перезапустить ViewModel при переходе между вкладками в Oracle JET? - PullRequest
0 голосов
/ 29 марта 2019

Я разрабатываю приложение CRUD, в котором я перехожу со страницы, где отображаются таблицы моих данных, к некоторым формам, чтобы добавлять или редактировать эти данные.я хочу, например, когда я добавляю некоторые данные и перехожу на страницу таблицы, чтобы показать добавленную новую строку.

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

вот как я перехожу на вкладку при нажатии кнопки отправки:

   $.ajax({
            url: url +'/customer',
            type: "POST",
            data: JSON.stringify(dataObj),
            contentType: 'application/json',
            success: function (response) {
                console.log(response);

            },
            error: function(error){
                console.log("Something went wrong", error);
            }
        }).then(function () {
            oj.Router.rootInstance.go("customers");
            return true;

        })

и это действие обновления, которое я использую сейчас:

  self.customerData = function (){
        tempArray = [];
        $.getJSON(url + "/customer").
        then(function(tasks){

            $.each(tasks, function (){

                tempArray.push({
                    customerId: this._id,
                    name: this.name,
                    address: this.address,
                    email: this.email,
                    phone: this.phone,
                    area: this.area,
                    empNum: this.empNum,
                    sector: this.sector,
                    website: this.website,
                    facebook: this.facebook,
                    linkedin: this.linkedin,
                    activity: this.activity.name,
                    country: this.country.name
                });
            });


            var auxTab =[];
            for (var i =0; i<tempArray.length; i++)
            {
                var obj ={};
                obj.customerId = i;
                obj.name = tempArray[i].name;
                obj.address = tempArray[i].address;
                obj.email= tempArray[i].email;
                obj.phone = tempArray[i].phone;
                obj.area = tempArray[i].area;
                obj.empNum = tempArray[i].empNum;
                obj.website = tempArray[i].website;
                obj.facebook = tempArray[i].facebook;
                obj.linkedin = tempArray[i].linkedin;
                obj.activity = tempArray[i].activity;
                obj.country = tempArray[i].country;

                if (tempArray[i].sector === 'true')
                {
                    obj.sector = 'Public';
                }
                else
                {
                    obj.sector = 'Private';
                }

                auxTab[i] = obj;


            }

            self.customerArray(auxTab);

        });
    };

  self.refreshClick = function(event){
        self.customerData();
        return true;
    }

я ожидаю строкубудет автоматически отображаться при переходе на вкладку «Клиент», но это не так.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Почему бы просто не вызвать метод customerData() внутри connected() функции?Эта функция автоматически вызывается (если вы ее определили) из viewModel при отображении новой html-страницы.

Поместите ее в вашу ViewModel, в которой есть данные таблицы:

self.connected = function(){
    self.customerData();
};

Для более подробной информацииподробности см. в документах .

Примечание. Функция connected используется в версии 6 и более поздних.До этого функция называлась bindingsApplied.

0 голосов
/ 30 марта 2019

Как правило, вы можете использовать ko наблюдаемые, чтобы гарантировать, что новые данные отражаются в пользовательском интерфейсе.Если вы переходите к виртуальной машине, при создании виртуальной машины вы должны передать ей параметры, которые могут содержать наблюдаемые.В том случае, когда наблюдаемое обновляется, неважно откуда, будет отражаться в вашей ВМ.

Я вижу, что ваш метод выборки данных клиента представляет собой простой массив, и я предполагаю, что он связан с пользовательским интерфейсом.Вы пытались сделать tempArray как наблюдаемый массив?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...