Почему код функции viewmodel выполняется под нагрузкой? - PullRequest
0 голосов
/ 30 октября 2019

В моей модели просмотра есть функция, которая выполняется, как только страница загружается.

У меня есть кнопка, которая просто покажет предупреждение (пока):

<button type="button" class="btn btn-outline-primary waves-effect waves-light" data-bind="click: $root.showData('user')">POS User</button>

а вот моя ВЕСЬ модель просмотра:


let User = function(id, firstName, lastName, email, phone, isActive ){
  this.id = id;
  this.firstName = firstName;
  this.lastName = lastName;
  this.email = email;
  this.phone = phone;
  this.isActive = isActive;
}


function UsersViewModel () {

    var self = this; // Scope Trick

    // User, Customer, Tech
    self.currentUserType = 
    ko.observable("posUser");

    // Arrays
    self.posUsers    = ko.observableArray();
    self.customers   = ko.observableArray();
    self.technicians = ko.observableArray();

    self.currentUsers = ko.observableArray();


    self.currentUsers.push(new User(12,"John","Smith","john@gmail.com","800-333-3333",true));


    self.showData = function(userType){
        alert(userType);
    }
};


ko.applyBindings(new UsersViewModel());

Посмотрите, как он показывает предупреждение при нагрузке? Function Firing

Есть идеи, почемуэто происходит?

1 Ответ

1 голос
/ 30 октября 2019

Вот два способа решения вашей проблемы:

оберните вашу функцию в другую функцию :

<button data-bind="click: function () { $root.showData('user'); }">POS User</button>

, если вы находитесь в контексте , например with: user или foreach с $data, вы можете просто сделать, как показано ниже, и в вашей функции первый параметр будет вашим текущим контекстом:

<!-- ko with: user -->    
<button data-bind="click: $root.showData">POS User</button>
<!-- /ko -->

self.showData = function (user) { ... };

как несколько не связанное замечаниеЗадумывались ли вы о своем аббревиатуре «POS» и о том, что она читает полностью для многих людей? :)

...