CustomBinding Issue

by gperng

HTML

<script src="http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.0.0.debug.js"></script>
<script src="https://raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js"></script>
<div id="container" data-bind="with: viewModel">
    <div data-bind="custom: selectedModel">
    </div>
</div>

<button data-bind="click: update">Update</button>
<button data-bind='click: setModel1'>Set Model1</button>
<button data-bind='click: setModel2'>Set Model2</button>

<script id='test' type='html/template' charset='utf-8'>
<span data-bind='text: name'></span>
</script>

CSS

.val { font-weight: bold; }
td, th { margin: 2px; padding: 2px; border: solid 1px black; }
th { background-color: #333; color: #fff; }

JavaScript

ko.bindingHandlers.custom = {
    update: function(element, valueAccessor) {
        console.log("BAM!");
        while (element.firstChild)
            ko.removeNode(element.firstChild);
        
        ko.renderTemplate('test', valueAccessor(), {}, element, 'replaceNode');

    }  
};


var innerModel = {
    name: ko.observable('junk')
};
    
var innerModel2 = {
    name: ko.observable('junk2')
};
    
var viewModel = {
    im1: innerModel,
    im2: innerModel2,
    selectedModel: ko.observable({name:'xxx'})
};

var dataFromServer = { name: "Bob" };

function update() {
     //ko.mapping.fromJS(dataFromServer, null, viewModel.innerModel);
    viewModel.im1.name(dataFromServer.name);
    dataFromServer.name = dataFromServer.name + "!";
}

function setModel1() {
    viewModel.selectedModel(viewModel.im1);
}

function setModel2() {
    viewModel.selectedModel(viewModel.im2);
}

viewModel.selectedModel.subscribe(function(newValue) {
    console.log(newValue.name());
});

ko.applyBindings(viewModel);