我有一个淘汰组件,我用它来封装一个bootstrap模式。除了当我尝试将任何内容插入模态的主体时,它的效果很好。我的第一种方法是将html放入模态对话框的 params.Content 中,但我有一个难以逃脱嵌套引号的类型。我想要做的就是像下面那样嵌套组件,并在模态体内出现<test>
元素。
为页面敲除ViewModel
function recordManagement() {
var recordManagementVM = function () {
self.SearchExisting = function() {
console.log(response);
}
}; //--End VM --
ko.applyBindings(new recordManagementVM(), document.getElementById("recordmanagement"));
记录管理页面
<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
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;
}
});
答案 0 :(得分:1)
在Knockout 3.3中,他们添加了将子节点传递到组件并通过$componentTemplateNode
使用淘汰赛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"));
&#13;
<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>
&#13;