2014-01-09 6 views
0

Я применяю его только один раз (по крайней мере, я так думаю). И я получаю это сообщение об ошибкеЯ никогда не использовал ko.applyBindings до того, пока еще есть ошибка, говорящая, что я применяю привязки несколько раз к тому же элементу.

Нельзя применять привязки несколько раз к одному элементу.

Проект MVC 5 и WebAPI 2.

Вот упрощенный код:

Это упрощенный макет:

<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
</head> 
<body> 
    @RenderBody() 

    @Scripts.Render("~/scripts/jquery") 
    @Scripts.Render("~/scripts/bootstrap") 
    @Scripts.Render("~/scripts/knockout")<!--knockout mapping also included here--> 
    @Scripts.Render("~/scripts/jqueryval") 

    @RenderSection("scripts", required: false) 
</body> 
</html> 

вид контакта Контроллер:

@Html.Partial("~/Views/Templates/_ContactList.cshtml")<!--partial view - code is given below --> 
@section Scripts { 
    @Scripts.Render("~/viewmodel/contact")<!--js contact view model- code is given below--> 
} 

контактный список частичный вид:

<table class="table table-condensed table-hover" data-bind="visible: contacts().length > 0"> 
<thead> 
    <tr> 
     <th>#</th> 
     <th>Name</th> 
     <th>Address</th> 
     <th>City</th> 
    </tr> 
</thead> 
<tbody data-bind="foreach: contacts"> 
    <tr data-bind="attr: { 'id': ID }"> 
     <td data-bind="text: $index() + 1"></td> 
     <td data-bind="text: Name"></td> 
     <td data-bind="text: Address"></td> 
     <td data-bind="text: City"></td> 
    </tr> 
</tbody> 

вид контакта расслоение плотной модели:

var contactVM = function() { 
    //api url 
    var url = "/api/contact"; 
    var self = this; 
    // list of contacts 
    self.contacts = ko.observableArray([]); 

    // single contact 
    self.contact = ko.observable(''); 

    //contact properties 
    self.ID = ko.observable(''); 
    self.Name = ko.observable(''); 
    self.Address = ko.observable(''); 
    self.City = ko.observable(''); 

    $('.ajax-loading').show(); 
    $.ajax({ 
     url: url, 
     type: "GET", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8" 
    }).done(function (data) { 
     self.contacts(data); 
    }).fail(function() { 
     alert("error"); 
    }).always(function() { 
     $('.ajax-loading').hide(); 
    }); 
}; 
$(window).load(function() { 
    ko.applyBindings(new contactVM()); 
}); 

Что я делаю неправильно?

ответ

1

Я никогда не применяю привязки через сам объект.

http://jsfiddle.net/kPDW9/

Здесь также есть разделение между контактной моделью и самих контактов.

var Contact = function(data) { 
    var self = this; 
    self.ID = ko.observable(data.ID); 
    self.Name = ko.observable(data.Name); 
    self.Address = ko.observable(data.Address); 
    self.City = ko.observable(data.City); 
} 

var viewModel = function() { 
    var self = this; 
    // list of contacts 
    self.contacts = ko.observableArray([]); 
}; 

Кроме того, для примера, вызов ajax также находится за пределами модели просмотра, чтобы отделить намерение.

0

Вызов ko.applyBindings из $ (документ) .ready (...) вместо $ (окна) .load (...)

0

Вы также можете переместить применить привязки внутри модели. Например:

var contactVM = function() { 
    //api url 
    var url = "/api/contact"; 
    var self = this; 
    // list of contacts 
    self.contacts = ko.observableArray([]); 

    // single contact 
    self.contact = ko.observable(''); 

    //contact properties 
    self.ID = ko.observable(''); 
    self.Name = ko.observable(''); 
    self.Address = ko.observable(''); 
    self.City = ko.observable(''); 

    $('.ajax-loading').show(); 
    $.ajax({ 
     url: url, 
     type: "GET", 
     dataType: "json", 
     contentType: "application/json; charset=utf-8" 
    }).done(function (data) { 
     self.contacts(data); 
    }).fail(function() { 
     alert("error"); 
    }).always(function() { 
     $('.ajax-loading').hide(); 
    }); 

    ko.applyBindings(self); 
}; 
$(window).load(function() { 
    var viewModel = new contactVM(); 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^