Noramly,使用recommended AMD模块模式的Knockout JS组件接受参数:
define(['text!./Unlisted.html'], function (html) {
var unlistedVM;
function Unlisted(params) {
unlistedTeesVM = this;
this.sProductCode = params.sProductCode || 'gmn';
this.bIs18 = params.bIs18;
this.successCallback = params.successCallback;
this.notificationCallback = function () { null; };
// ...
return unlistedTeesVM;
}
// ...
return { viewModel: UnlistedVM, template: html };
});
但我想将notificationCallback
分配给Notification组件中的一个函数:
define(['text!./Notifications.html'], function (htmlString) {
var notificationsVM;
function NotificationsVM(params) {
notificationsVM = this;
this.sProductCode = params.sProductCode || 'gmn';
// ...
this.showNotification = function _showNotification(message) {
// ...
}.bind(this);
// SET PARAMS
params.notificationCallback = notificationsVM.showNotification;
// THIS ALSO FAILS
params.notificationCallback = this.showNotification;
// ...
return notificationsVM;
}
// ...
// Return component definition
return { viewModel: NotificationsVM, template: htmlString };
});
如果我在params.notificationCallback
暂停执行,那么分配似乎总是有效。显然,notificationCallback
的副本被传递给Notification组件,因为Unliisted组件中的函数被调用而不是Notification组件中的预期showNotification方法。有没有办法将Notification组件的notificationCallback
功能分配给Unlisted compent的notificationCallback
自己的属性?
以下是未列出组件的HTML代码段:
<notifications params="sProductCode: sProductCode, notificationCallback: notificationCallback"></notifications>