Asp.net mvc 4 observableArray不';t使用require.js在UI中更新
所以我同时使用require.js和knockout.js。我有一个简单的页面,将收集用户 代码如下: cshtml文件: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"> &
@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);