将函数分配给给定的Knockout JS组件参数

时间:2016-10-25 12:49:37

标签: javascript knockout.js components

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>

0 个答案:

没有答案