Asp.net mvc 4 observableArray不';t使用require.js在UI中更新

Asp.net mvc 4 observableArray不';t使用require.js在UI中更新,asp.net-mvc-4,knockout.js,requirejs,Asp.net Mvc 4,Knockout.js,Requirejs,所以我同时使用require.js和knockout.js。我有一个简单的页面,将收集用户 代码如下: cshtml文件: @section scripts{ <script data-main="../Scripts/app/usermanagement/app.invite" src="../Scripts/lib/require.js"></script> } <div id="usermanagement-invite-view"> &

所以我同时使用require.js和knockout.js。我有一个简单的页面,将收集用户

代码如下:

cshtml文件:

@section scripts{
    <script data-main="../Scripts/app/usermanagement/app.invite" src="../Scripts/lib/require.js"></script>
}
<div id="usermanagement-invite-view">
    <p>Enter all the users you would like to invite to this account. You will be able to set the permissions onces you have added them.</p>
    <span data-bind="text: ko.toJSON($data)"></span>
    <div data-bind="foreach: invitedUsers()">
        <div><span data-bind="text: firstName"></span></div>
        <div><span data-bind="text: lastName"></span></div>
        <div><span data-bind="text: emailAddress"></span></div>
    </div>
    <div>
        <input type="text" placeholder="First Name" data-bind="text: firstName" class="input" />
        <input type="text" placeholder="Last Name" data-bind="text: lastName" class="input" />
        <input type="email" placeholder="EmailAddress" data-bind="text: emailAddress" class="input" />
        <input type="button" value="Invite" data-bind="click: invite" class="submit" />
    </div>
</div>
以下是main.invite.js:

define(['ko', 'inviteViewModel'], function (ko, inviteViewModel) {
    var
        run = function () {
            var vm = new inviteViewModel();
            ko.applyBindings(vm, document.getElementById('#usermanagement-invite-view'));
        };
    return {
        run: run
    };
});
以下是ViewModel:

define('inviteViewModel', ['jquery', 'ko', 'toastr', 'model.user'], function ($, ko, toastr, User) {

    return function inviteViewModel() {
        var self = this;

        self.firstName = ko.observable();
        self.lastName = ko.observable();
        self.emailAddress = ko.observable();

        self.invitedUsers = ko.observableArray();

        self.invite = function () {
            var newUser = new User();
            newUser.firstName(self.firstName());
            newUser.lastName(self.lastName());
            newUser.emailAddress(self.emailAddress());

            self.invitedUsers().push(newUser);
            console.log(self.invitedUsers());


        };

    }
});
出于某种原因,当我调用invite函数时,代码显示我正在向集合添加一些内容,但UI没有得到更新。这里是我执行console.log时的样子。但是,这并不表示该值为


我做错了什么?

您需要在
observableArray
上直接调用
push
,以便为您跟踪更改并更新UI,因此您不需要括号:

self.invitedUsers.push(newUser);
另请参见

弹出、推送、移位、取消移位、反转、排序、拼接

所有这些函数都相当于运行本机JavaScript 数组函数,然后通知侦听器 关于变化:

myObservableArray.push('somenewvalue')
将一个新项添加到 排列

self.invitedUsers.push(newUser);