Javascript 从数组计算的可更新的KO
在我的模型中,我有一个可观测的计算值。它是可更新的。它将选择数组中的第一个值写入用户角色数组,但从中读取正确的值,所以很混乱。如果您尝试my,您将看到,在从中选择另一个值之后,选择另一个依赖项不会发生更改。我怎样才能让它工作?谢谢大家!Javascript 从数组计算的可更新的KO,javascript,arrays,knockout.js,Javascript,Arrays,Knockout.js,在我的模型中,我有一个可观测的计算值。它是可更新的。它将选择数组中的第一个值写入用户角色数组,但从中读取正确的值,所以很混乱。如果您尝试my,您将看到,在从中选择另一个值之后,选择另一个依赖项不会发生更改。我怎样才能让它工作?谢谢大家! <div id="UserManagement" class="container"> <div class="col-md-12"> <div data-bind="with: user"> <
<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>
函数UserManagementModel(){
var self=这个;
self.apps=[{
代码:“角色\应用程序1”,
名称:“App1”
}, {
代码:“角色\应用程序2”,
名称:“App2”
}, {
代码:“角色管理器”,
名称:“经理小组”
}];
self.user=ko.observable(新用户({
用户ID:1,
用户名:“尼克”,
角色:[“角色经理”、“角色更改用户”]
}))}
功能用户(数据){
var self=这个;
self.userId=data.userId;
self.username=ko.observable(data.username);
self.roles=ko.observearray(data.roles);
self.app=ko.computed({
读:函数(){
返回ko.utils.arrayFilter(self.roles(),函数(值){
返回值.indexOf(''''u',value.indexOf(''u')+2)<0;
})[0];
},
写入:函数(值){
$.each(self.roles(),函数(indx,role){
if(role.indexOf(“”“”,role.indexOf(“”“”)+1)<0)self.roles()[indx]=值;
});
},
所有者:self
}).延伸({
节气门:50
});}
var模型=新的UserManagementModel();ko.应用绑定(模型);
@Skeeve我不清楚您试图实现什么目标,但您的计算可观测值(应用程序)未进行评估的原因是:
计算可观测(app)的依赖关系是角色可观测数组,在其写入函数中,您正在更新可观测数组本身不可观测的值(非数组),因此knockout在可观测数组中未发现任何变化,因为它的读取函数未执行
因此,如果您想评估角色数组值变化的计算可观察值(app),那么您必须在角色可观察数组中创建每个可观察值,在您的情况下,您可以这样做:
...
roles: [
ko.observable("ROLE_MANAGER"),
ko.observable("ROLE_CHANGE_USER")]
..
谢谢!当我在文本输入中更改select的依赖项时,或者当我从另一个列表中选择值时,您能告诉我为什么select的值没有更新吗?
...
roles: [
ko.observable("ROLE_MANAGER"),
ko.observable("ROLE_CHANGE_USER")]
..