Dilip Nandakumar
Dilip Nandakumar

Reputation: 318

cannot applybindings multiple times knockout in MVC partial view

Hi have a parent page in which i have used knockout js to bind model with html element.

Now i make a ajax call to receive a partialviewresult which i place it in a div conbtainer.

All works fine if use the inbuilt mvc model binding.

But when i go for knockout in my partial view as well. I get the errorcannot applybindings multiple times knockout in MVC partial view.

I have even tried using

ko.applybindings(new vm(),document.getelementbyId("div1"))
ko.applybindings(new vm1(),document.getelementbyId("div2"))

But still get the same error. Is it not possible to get the partial view result from the action method and use knockout in partial view ? I do not want hide the div in my parent page and get a JsonResult and bind it to my div element.

Upvotes: 0

Views: 993

Answers (1)

dfperry
dfperry

Reputation: 2258

If you have the following (general layout):

<div id="parent">
  content
  <div id="partialTarget"></div>
</div>

and you've already applied your bindings to #parent, you have to clean #partialTarget before applying the viewmodel again. #partialTarget has already been bound from the first pass, so to apply the bindings to the loaded contents, you need to do something like this:

var reapplyBindings = function(element){
    var vm = ko.dataFor(element);
    if( vm ) {
        ko.cleanNode(element);
        ko.applyBindings(vm, element);
    }
};

element.load(‘path/to/fragment.html’, function() {
    //the [0] selector is needed to be sure we have an actual dom element, not the jQuery wrapper
    reapplyBindings(element[0]); 
    //do whatever you’re already doing
});

Upvotes: 1

Related Questions