gpt4 book ai didi

javascript - 将参数从 Knockout 模板传递到模态

转载 作者:行者123 更新时间:2023-11-30 07:22:21 26 4
gpt4 key购买 nike

在这个代码示例中,我正在寻找一种方法将参数从 Knockout 的 template 中的 data 传递到 Knockout 的 data-bind 中,这应该最终出现在 modal 窗口中。

结果应该是一个模态窗口,根据要删除的参与者显示参与者的姓名。

现在我必须手动输入名称,应该怎么做才能让它们自动绑定(bind)?

var viewModel = function() {
this.showModal = function() {
console.log("Showing modal");
$('#modal').modal('show');
}
this.buyer = {
name: 'Franklin',
credits: 250
};
this.seller = {
name: 'Mario',
credits: 5800
};
};
ko.applyBindings(new viewModel);
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet" />
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<div data-bind="template: { name: 'person-template', data: buyer }"></div>
<div data-bind="template: { name: 'person-template', data: seller }"></div>

<script type="text/html" id="person-template">
<h3 data-bind="text: name"></h3>
<p>Credits: <span data-bind="text: credits"></span>
</p>
<button data-bind="click: $root.showModal" class="btn">Delete</button>
</script>

<div id="modal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">Delete item</h4>
</div>
<div class="modal-body">
<p>Really delete Franklin?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary">Delete</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->

最佳答案

首先,您需要将名称命名为 KO 管理的名称:

<p>Really delete <span data-bind="text: deleting"></span>?</p>

在您的 View 模型中为自己提供一个可观察对象:

this.deleting = ko.observable(null);

然后更新 showModal 来更新一个 observable:

this.showModal = function(deleting) {
this.deleting(deleting.name);
console.log("Showing modal");
$('#modal').modal('show');
};

然后,由于您正在使用 $root.showModalthis 将是不正确的,但我们可以使用 bind 解决该问题:

<button data-bind="click: $root.showModal.bind($root)" class="btn">Delete</button>

实例:

var viewModel = function() {
this.showModal = function(deleting) {
this.deleting(deleting.name);
console.log("Showing modal");
$('#modal').modal('show');
};
this.deleting = ko.observable(null);
this.buyer = {
name: 'Franklin',
credits: 250
};
this.seller = {
name: 'Mario',
credits: 5800
};
};
ko.applyBindings(new viewModel);
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet" />
<link href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="template: { name: 'person-template', data: buyer }"></div>
<div data-bind="template: { name: 'person-template', data: seller }"></div>

<script type="text/html" id="person-template">
<h3 data-bind="text: name"></h3>
<p>Credits: <span data-bind="text: credits"></span>
</p>
<button data-bind="click: $root.showModal.bind($root)" class="btn">Delete</button>
</script>

<div id="modal" class="modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title">Delete item</h4>
</div>
<div class="modal-body">
<p>Really delete <span data-bind="text: deleting"></span>?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary">Delete</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->

关于javascript - 将参数从 Knockout 模板传递到模态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34397741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com