2016-09-13 12 views
5

Używam kendo do budowania aplikacji mobilnych i używam knockout js do powiązań, ale otrzymuję komunikat o błędzie "Nie można zastosować wielu powiązań do tego samego elementu. ". Mam dwa pliki javascript, które zawierają powiązania, poniżej mojego koduKnockout Js "Nie można zastosować powiązań wiele razy do tego samego elementu"

//Employee.js// 

function EmployeeViewModel() { 
    this.EmployeeName= ko.observable(); 
    this.EmployeeMobile= ko.observable(); 
    this.EmployeeEmail= ko.observable(); } 
    ko.applyBindings(new EmployeeViewModel()); 

//Company.js// 
function CompanyViewModel() { 
    this.CompanyName= ko.observable(); 
    this.CompanyMobile= ko.observable(); 
    this.CompanyEmail= ko.observable(); } 
    ko.applyBindings(new CompanyViewModel()); 

//In index page i am using this both script file drag and drop// 
<html> 
<head> 
</head> 
<body> 
    <script src="Employee.js"></script> 
    <script src="Company.js"></script> 
</body> 
</html> 

Odpowiedz

9

Funkcja "ko.applyBindings" trwa 2 argumenty:

applyBindings(viewModelOrBindingContext, rootNode); 

pierwszy - widok modelu

sekund - węzeł DOM wiązania zostaną zastosowane do

nazywacie „ko.applyBindings "metoda dwa razy - w obu funkcjach, tylko z pierwszym parametrem. Oznacza to, że zamierzasz powiązać dwa różne modele z tym samym węzłem - głównym dokumentem. Powoduje to błąd.

Można używać dwóch podejść:

  • stworzenie jednego globalnego modelu widok z podmodeli i zastosować wiążące tylko raz:

    //Employee.js// 
    function EmployeeViewModel() { 
        this.EmployeeName= ko.observable(); 
        this.EmployeeMobile= ko.observable(); 
        this.EmployeeEmail= ko.observable(); 
    } 
    
    //Company.js// 
    function CompanyViewModel() { 
        this.CompanyName= ko.observable(); 
        this.CompanyMobile= ko.observable(); 
        this.CompanyEmail= ko.observable(); 
    } 
    
    //In index page i am using this both script file drag and drop// 
    <html> 
    <head> 
    </head> 
    <body> 
        <script src="Employee.js"></script> 
        <script src="Company.js"></script> 
        <script> 
        ko.applyBindings({ employee: new EmployeeViewModel(), company: new CompanyViewModel() }); 
        </script> 
    </body> 
    </html> 
    
  • zastosować wiązania do różnych węzłów:

`` `

//Employee.js 
function EmployeeViewModel() { 
    this.EmployeeName= ko.observable(); 
    this.EmployeeMobile= ko.observable(); 
    this.EmployeeEmail= ko.observable(); 
    ko.applyBindings(new EmployeeViewModel(), document.getElementById("employee")); 
} 

//Company.js 
function CompanyViewModel() { 
    this.CompanyName= ko.observable(); 
    this.CompanyMobile= ko.observable(); 
    this.CompanyEmail= ko.observable(); 
    ko.applyBindings(new CompanyViewModel(), document.getElementById("company")); 
} 

//In index page i am using this both script file drag and drop// 
<html> 
<body> 
    <script src="Employee.js"></script> 
    <script src="Company.js"></script> 
    <div id="employee"></div> 
    <div id="company"></div> 
</body> 
</html> 

`` `

+0

dzięki za poświęcony czas, to sloved mój problem –

+0

Opcja 1 pracował wielki dla mnie - dzięki – mcolegro

0

Aby zastosować wiązanie wiele razy. Najpierw musisz wyczyścić powiązanie.

jak poniżej

var element = $('#elementId')[0]; 
ko.cleanNode(element); 

Tylko wtedy można zastosować wiązania ponownie na tym samym elemencie.

+0

@thanks spędzenia czasu –

Powiązane problemy