Events Knockout.JS:如何在组件内部激发事件并使用它
在文件“KoComponents.js”中,我编写了以下组件Events Knockout.JS:如何在组件内部激发事件并使用它,events,knockout.js,triggers,components,Events,Knockout.js,Triggers,Components,在文件“KoComponents.js”中,我编写了以下组件 ko.components.register('pager-navigator', { viewModel: function (params) { var self = this; self.GoToPageNumber = function (pageNo) { // Raise event and with the value of the parameter pageNo.
ko.components.register('pager-navigator', {
viewModel: function (params) {
var self = this;
self.GoToPageNumber = function (pageNo) {
// Raise event and with the value of the parameter pageNo.
alert('Button clicked with parameter (pageNo) = ' + pageNo);
}
},
template: '<input type="button" value="Click me and raise event" data-bind="click: function(){GoToPageNumber(1);}"/>'
ko.components.register('pager-navigator'{
viewModel:函数(参数){
var self=这个;
self.GoToPageNumber=函数(页码){
//使用参数pageNo的值引发事件和。
警报('用参数(页码)='+页码单击按钮);
}
},
模板:“”
}))
在视图中,我编写了以下代码来使用创建的组件
<div data-bind='component: {name: "pager-navigator", params: { TotalPagesCount: 20 }}'></div>
我的问题是:如何使用参数在组件中激发事件并从视图中使用该事件 构建代码的好方法是在父页面和组件之间共享可观察变量。它将与参数一起传递 因此,如果您的父VM有一个名为“pageNum”的可观察对象,那么请确保您的组件也有,然后将可观察对象传递给组件以链接它们 这样,如果组件更改了pageNum值,那么父级中的可观察值也将更改。因此,您可以订阅父级中的变量,如果它发生更改,您可以执行一些代码。本质上,如果组件更改了pageNum,那么父级将知道并可以相应地采取行动 这听起来可能有点冗长,但这是一个非常干净的解决方案,它确实可以帮助您将问题分解为多个部分,并减少强耦合 希望这个解释有道理,但如果你需要一把小提琴来演示,请告诉我。这是答案:
<div data-bind='component: {name: "pager-navigator", params: { TotalPagesCount: 20 }}'></div>
ko.components.register('pager-navigator', {
viewModel: function (params) {
var self = this;
self.PageNumber = params.pageNumber;// pageNumber is an observable passed parameter.
self.GoToPageNumber = function (pageNo) {
self.PageNumber(pageNo);// Act as passing by reference.
}
},
template: '<input type="button" value="Click me and raise event" data-bind="click: function(){GoToPageNumber(2);}"/>'
});
var self = this;
// Declare an observable variable named CurrentPageNumber with the value 1.
self.CurrentPageNumber = ko.observable(1);
self.CurrentPageNumber.subscribe(function (newValue) {
// The value of CurrentPageNumber is changed inside the component.
var newPageNo = newValue;
alert('value changed = ' + newPageNo);
self.SearchEmployees(newPageNo);
});