我的模型中有一个可计算的可观测值。这是可更新的。尽管它从select数组中读取第一个值,但它从其中读取了正确的值,但它却将其写入用户的Roles数组中,因此很混乱。如果您尝试使用我的JSFiddle,您会看到,从另一个依赖项中选择另一个值后,它不会改变。我该如何运作?谢谢!
<div id="UserManagement" class="container">
<div class="col-md-12">
<div data-bind="with: user">
<select data-bind="options: $root.apps, value: app, optionsText: 'name', optionsValue: 'code'"></select>
</div>
<select data-bind="options: apps, value: user().app, optionsText: 'name', optionsValue: 'code'"></select>
<!-- ko foreach: user().roles -->
<input type="text" data-bind="value : $data" />
<!-- /ko -->
</div>
function UserManagementModel() {
var self = this;
self.apps = [{
code: "ROLE_APP1",
name: "App1"
}, {
code: "ROLE_App2",
name: "App2"
}, {
code: "ROLE_MANAGER",
name: "Manager panel"
}];
self.user = ko.observable(new User({
userId: 1,
username: "Nick",
roles: ["ROLE_MANAGER", "ROLE_CHANGE_USER"]
}))}
function User(data) {
var self = this;
self.userId = data.userId;
self.username = ko.observable(data.username);
self.roles = ko.observableArray(data.roles);
self.app = ko.computed({
read: function () {
return ko.utils.arrayFilter(self.roles(), function (value) {
return value.indexOf('_', value.indexOf('_') + 2) < 0;
})[0];
},
write: function (value) {
$.each(self.roles(), function (indx, role) {
if (role.indexOf('_', role.indexOf('_') + 1) < 0) self.roles()[indx] = value;
});
},
owner: self
}).extend({
throttle: 50
});}
var model = new UserManagementModel();ko.applyBindings(model);
@Skeeve对我来说不清楚您要实现的目标,但是您的计算可观察值(应用程序)未评估的原因是:
计算的可观察(app)的依赖关系是角色可观察数组,并且在其写入函数中,您正在更新本身不可观察的可观察数组的值(而非数组),因此敲除未在可观察数组中找到任何变化它的读取功能未执行
因此,如果您要评估角色数组值更改中的可观察值(应用程序),则必须在角色可观察数组中创建每个可观察值,在这种情况下,您可以执行以下操作:
...
roles: [
ko.observable("ROLE_MANAGER"),
ko.observable("ROLE_CHANGE_USER")]
..
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句