2015-03-05 10 views
8

Chcę wyłączyć przycisk za pomocą knockout.js, gdy użytkownik kliknie przycisk, a serwer przetwarza niektóre dane. Patrzę na example w samouczkach nokautowych, ale wydaje się, że czegoś brakuje.Jak włączyć lub wyłączyć przycisk za pomocą knockout.js

mam enable: udział w data-bind:

<body> 
    <form id="form1" runat="server" > 
    <h1 style="text-align: center">Select the item(s) you want.</h1> 
     <br /> 
     <br /> 
     <div id="buttons" style="text-align: center"> 
      <button data-inline="true" data-bind="click: submit, enable: canSubmit" >Submit</button> 
      <button data-inline="true" data-bind="click: cancel">Cancel</button> 
     </div> 

mam ustawić zaobserwować w modelu widokiem na false. Jednak przycisk jest włączony na stronie po zainicjowaniu widoku. Myślę więc, że jest to problem wiążący dane.

function ViewModel() { 
    var self = this; 
    self.selectedItems = ko.observableArray([]); 
    // we should start off not being able to click the submit button 
    self.canSubmit = ko.observable(false); 
}; 

chcę mieć przycisk włączony, dopóki użytkownik kliknie przycisk Prześlij, a następnie go wyłączyć, dopóki serwer zakończył robi to sprawa.

Jak można powiązać obserwowalną wartość enable z przyciskiem?

Odpowiedz

5

Pomyłkowo zastępujesz swoje obserwowalne prostymi zmiennymi js. canSubmit jest obserwowalne, więc zmienić jego wartość poprzez wywołanie funkcji:

self.submit = function() { 
     // disable submit button 
     self.canSubmit(false); 
     // do stuff 
     self.canSubmit(true); 
}; 

Reszta jest w porządku, jak jest.

4

Nie aktualizujesz swojej obserwowalnej wartości, zmieniasz odwołanie self.canSubmit, co wskazuje na wartość logiczną.

zmienić funkcję self.submit do:

self.submit = function() { 
     // disable submit button 
     self.canSubmit(false); 
     // do stuff 
     self.canSubmit(true); 
};