var old_template = ko.bindingHandlers['template'];
var prefix = 'uiv1/'
// modifying template binding
ko.bindingHandlers['template'] = {
'init': function(element, valueAccessor) {
var bindingValue = ko.utils.unwrapObservable(valueAccessor());
if (typeof bindingValue === 'string') bindingValue = prefix + bindingValue;
else if (bindingValue.name) bindingValue.name = prefix + bindingValue.name;
return old_template.init(element, function() {
return bindingValue
});
},
'update': function(element, valueAccessor, allBindings, viewModel, bindingContext) {
return old_template.update(element, valueAccessor, allBindings, viewModel, bindingContext);
}
}
// view model
var vm = {
buyer: { name: 'Franklin', credits: 250 },
seller: { name: 'Mario', credits: 5800 },
original: { name: 'original', credits: 20000 }
};
ko.applyBindings(vm, document.getElementById('modified'));
//resetting it to original
ko.bindingHandlers['template'] = old_template;
ko.applyBindings(vm, document.getElementById('original'));
body { font-family: monospace; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>
<script type="text/html" id="uiv1/admin/dashboard">
<h3 data-bind="text: name"></h3><span>(from: "uiv1/admin/dashboard")</span>
<p>Credits: <span data-bind="text: credits"></span>
</p>
</script>
<script type="text/html" id="dashboard">
<h3 data-bind="text: name"></h3><span>(from: "dashboard")</span>
<p>Credits: <span data-bind="text: credits"></span>
</p>
</script>
<div id="modified">
Modified Template
<div data-bind="template: { name: 'admin/dashboard', data: buyer }"></div>
<div data-bind="template: { name: 'admin/dashboard', data: seller }"></div>
</div>
<hr>
<div id="original">
Original Template
<div data-bind="template: { name: 'dashboard', data: original }"></div>
</div>
、どのようにテンプレート名は、URLを提出することを決議していますか?それは標準的なKOのものではありませんか? – miellaby
私は基本URL( "http(s)"と "www.domainName.com"と "/")とそれに続くノックアウトで指定した相対URLを取って来ると思います。 – Calicoder