knockoutjs には、いくつかのロジックを実行するカスタム コンポーネント ローダーがあります。基本的には createViewModel 関数からテンプレートを変更したいと考えています。があることcomponentInfo.templateNodes
は知っていますが、どうすればよいかわかりません。
createViewModel 関数で変更したい理由は、コンポーネントが表示されるたびに createViewModel 関数が呼び出されるためです。
ああ、コードは言葉よりもはるかに多くのことを語っているので、ここで自分でチェックしてください。
ko.components.loaders.unshift({
getConfig: function (name, callback) {
var component; // The component gets loaded somewhere. (Sadly I can't alter the template here because it is only called once.)
callback({
viewModel: {
createViewModel: function (params, componentInfo) {
// Load these parameters somewhere
var args;
var location;
// I'd love to add these two items before and after my template.
var before = "<div data-bind=\"with: " + location + "\">";
var after = "</div>";
// Construct a viewModel with the data provided.
return app.core.helpers.construct(component.viewModel, location, args);
}
},
template: component.template
});
},
loadTemplate: function (name, template, callback) {
// Get the location again.
var location;
// I just want to load the template while applying the correct binding scope from the createViewModel.
var templateString = "<!-- ko stopBinding: true -->\n<!-- ko with: " + location + " -->\n" + template + "\n<!-- /ko -->\n<!-- /ko -->";
// Just let it load.
ko.components.defaultLoader.loadTemplate(name, templateString, callback);
}
});