knockoutjs components params undefined

时间:2015-09-24 10:05:30

标签: knockout.js requirejs knockout-components

我正在创建一个Knockout js组件,以便在我的通知系统中使用。当我向页面添加一个组件时,我得到一个params是未定义的消息,看起来我的params对象不会发送到viewmodel的构造函数。

起初我认为我的组件加载器是问题,所以我手动注册了组件:

ko.components.register('notification-info', {
    viewModel: { require: "/notifications/info" },
    template: { require: "text!/notifications/info.tmpl.html"}
});

该组件由名为info.js

的js文件组成
define(['knockout'], function (ko) {

function InfoNotificationViewModel(params) {
    this.type = params.type;
    this.subject = params.subject;
    this.title = params.title;
    this.content = params.content;
}

return InfoNotificationViewModel();
});

和一个名为info.tmpl.html

的html模板
<div class="notification-container" data-bind="css: type">
<div class="notification-icon"><span class="glyphicon"></span></div>
<div class="notification-content">
    <div class="notification-subject" data-bind="text: subject">
    </div>
    <div class="notification-message">
        <p data-bind="text: title"></p>
        <p data-bind="text: content"></p>
    </div>
</div>

我使用组件绑定将组件添加到我的页面:

<div data-bind="component: {name: 'notification-info', params: {type: 'info', subject: '',title: '', content: ''} }"></div>

稍后这将填充通过websockets发送的数据,因此params将成为可观察的。

有人可以告诉我这里我做错了什么,我认为这与我注册组件的方式有关。

1 个答案:

答案 0 :(得分:1)

你应该返回viewmodel的构造函数,而不是

return InfoNotificationViewModel();

使用

return InfoNotificationViewModel;(没有括号)