[英]Nesting components in knockoutjs
I have a knockout component that I'm using to encapsulate a bootstrap modal. 我有一个淘汰赛组件,我正在用来封装引导程序模态。 It works great except for when I try to insert any content into the body of the modal.
除了当我尝试将任何内容插入到模式主体中时,它的效果都很好。 My first approach was putting html into the params.Content of the modal-dialog but I had a difficult type escaping the nested quotes.
我的第一种方法是将html放入params.modal -dialog的内容中,但是我很难将嵌套的引号转义。 What I'd like to do is just nest the components like I have below and have the
<test>
element appear inside the modal body. 我想做的就是像下面那样嵌套组件,并使
<test>
元素出现在模态主体内。
Knockout ViewModel for the page 页面的淘汰模型
function recordManagement() {
var recordManagementVM = function () {
self.SearchExisting = function() {
console.log(response);
}
}; //--End VM --
ko.applyBindings(new recordManagementVM(), document.getElementById("recordmanagement"));
Record Management page 记录管理页面
<div id="recordManagement">
<modal-dialog params="
{ModalId: 'searchExisting',
Title: 'Search Existing',
CancelText: 'Cancel',
SaveEvent: SearchExisting,
SaveText: 'Save',
Content: ''}">
<test></test>
</modal-dialog>
</div>
modal-dialog.js modal-dialog.js
ko.components.register('modal-dialog', {
template: '<div data-bind="attr: {id: ModalId}" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="" aria-hidden="true"> \
<div class="modal-dialog"> \
<div class="modal-content"> \
<div class="modal-header"> \
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button> \
<h3 class="modal-title" data-bind="html: Title"></h3> \
</div> \
<div class="modal-body" data-bind="html: Content"> \
</div> \
<div class="modal-footer"> \
<button type="button" class="btn btn-default" data-dismiss="modal" data-bind="text: CancelText">Cancel</button> \
<button type="button" class="btn btn-primary" data-bind="text: SaveText, click: SaveEvent">Save</button> \
</div> \
</div> \
</div> \
</div>',
viewModel: function (params) {
console.log(params);
var self = this;
self.Title = ko.observable(params.Title);
self.Content = ko.observable(params.Content);
self.ModalId = ko.observable(params.ModalId);
self.CancelText = ko.observable(params.CancelText);
self.SaveText = ko.observable(params.SaveText);
self.SaveEvent = params.SaveEvent;
}
});
In Knockout 3.3 they added the ability to pass child nodes into a component and reference them trough $componentTemplateNode
在Knockout 3.3中,他们添加了将子节点传递到组件中并通过
$componentTemplateNode
引用它们的功能。
Example using knockout 3.4: 使用剔除3.4的示例:
ko.components.register('modal-dialog', { template: '<div data-bind="attr: {id: ModalId}" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="" aria-hidden="true"> \\ <div class="modal-dialog"> \\ <div class="modal-content"> \\ <div class="modal-header"> \\ <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span></button> \\ <h3 class="modal-title" data-bind="html: Title"></h3> \\ </div> \\ <div class="modal-body" data-bind="template:{nodes:$componentTemplateNodes}"> \\ </div> \\ <div class="modal-footer"> \\ <button type="button" class="btn btn-default" data-dismiss="modal" data-bind="text: CancelText">Cancel</button> \\ <button type="button" class="btn btn-primary" data-bind="text: SaveText, click: SaveEvent">Save</button> \\ </div> \\ </div> \\ </div> \\ </div>', viewModel: function(params) { console.log(params); var self = this; self.Title = ko.observable(params.Title); self.Content = ko.observable(params.Content); self.ModalId = ko.observable(params.ModalId); self.CancelText = ko.observable(params.CancelText); self.SaveText = ko.observable(params.SaveText); self.SaveEvent = params.SaveEvent; } }); var recordManagementVM = function() { self.SearchExisting = function() { console.log(response); } }; //--End VM -- ko.applyBindings(new recordManagementVM(), document.getElementById("recordmanagement"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script> <div id="recordManagement"> <modal-dialog params=" {ModalId: 'searchExisting', Title: 'Search Existing', CancelText: 'Cancel', SaveEvent: SearchExisting, SaveText: 'Save', Content: ''}"> <div>Testing Child Nodes</div> </modal-dialog> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.