Knockout.js 在“选择”中加载视图,并在文本框中查看选定值
我正在尝试将“角色”加载到select控件中。 select将正确填充以下内容:Knockout.js 在“选择”中加载视图,并在文本框中查看选定值,knockout.js,Knockout.js,我正在尝试将“角色”加载到select控件中。 select将正确填充以下内容: var user = new spatest.myrole(result.roleid, result.rolename); var user = new spatest.roleViewModel(result.roleid, result.rolename); 但不是这样: var user = new spatest.myrole(result.roleid, result.rolename); v
var user = new spatest.myrole(result.roleid, result.rolename);
var user = new spatest.roleViewModel(result.roleid, result.rolename);
但不是这样:
var user = new spatest.myrole(result.roleid, result.rolename);
var user = new spatest.roleViewModel(result.roleid, result.rolename);
最后,我希望在选择控件中填充每个角色的值,然后在选择每个角色时,我希望rolename和roleid显示在文本框中:
<input id="idrolename" type="text" data-bind="value: rolename" />
<input id="idroleid" type="text" data-bind="value: roleid" />
我是击倒赛的初学者
My view.html:
<div class="dnnFormItem">
<div><label for="itemUser">[Resx:{key:"lblAssignedUser"}]</label></div>
<select id="rolesid" data-bind="options: roleList,
optionsText: 'rolename',
optionsValue: 'roleid',
optionsCaption: 'Choose...'"></select>
</div>
[Resx:{key:“lblAssignedUser”}]
我的JS文件:
var spatest = spatest || {};
spatest.roleListViewModel = function (moduleId, resx) {
var service = {
path: "spatest",
framework: $.ServicesFramework(moduleId)
}
service.baseUrl = service.framework.getServiceRoot(service.path);
var isLoading = ko.observable(false);
var roleList = ko.observableArray([]);
var init = function () {
getRoleList();
}
var getRoleList = function () {
isLoading(true);
// need to calculate a different Url for User service
var restUrl = service.framework.getServiceRoot(service.path) + "Myroles/Roles/";
var jqXHR = $.ajax({
url: restUrl,
beforeSend: service.framework.setModuleHeaders,
dataType: "json",
async: false
}).done(function (data) {
if (data) {
load(data);
}
else {
clear();
}
}).always(function (data) {
isLoading(false);
});
};
var load = function (data) {
roleList.removeAll();
var underlyingArray = roleList();
for (var i = 0; i < data.length; i++) {
var result = data[i];
var user = new spatest.roleViewModel(result.roleid, result.rolename);
// var user = new spatest.myrole(result.roleid, result.rolename);
// var user = { roleid: result.roleid, rolename: result.rolename };
underlyingArray.push(user);
}
roleList.valueHasMutated();
};
return {
init: init,
load: load,
roleList: roleList,
isLoading: isLoading
}
};
spatest.roleViewModel = function () {
var roleid = ko.observable('');
var rolename = ko.observable('');
var load = function (data) {
roleid(data.roleid)
rolename(data.rolename);
};
return {
roleid: roleid,
rolename: rolename,
load: load
}
}
spatest.myrole = function (roleid, rolename) {
this.roleid = roleid;
this.rolename = rolename;
}
spatest.roleChanged = function (obj, event) {
if (event.originalEvent) { //user changed
alert('1');
} else { // program changed
alert('2');
}
}
var spatest=spatest | |{};
spatest.roleListViewModel=函数(moduleId,resx){
var服务={
路径:“spatest”,
框架:$.ServicesFramework(moduleId)
}
service.baseUrl=service.framework.getServiceRoot(service.path);
var isLoading=可观察的ko(假);
变量roleList=ko.observearray([]);
var init=函数(){
getRoleList();
}
var getRoleList=函数(){
孤岛加载(真);
//需要为用户服务计算不同的Url
var restUrl=service.framework.getServiceRoot(service.path)+“Myroles/Roles/”;
var jqXHR=$.ajax({
url:restUrl,
发送前:service.framework.setModuleHeaders,
数据类型:“json”,
异步:false
}).done(函数(数据){
如果(数据){
加载(数据);
}
否则{
清除();
}
}).始终(功能(数据){
孤岛加载(假);
});
};
var load=函数(数据){
roleList.removeAll();
var underyingarray=roleList();
对于(变量i=0;i
您的roleViewModel
设置了一个内部load
函数来执行分配,因此
var user = new spatest.roleViewModel(result.roleid, result.rolename);
你需要做什么
user.load(result);
如果我这样做,那么我会得到“uncaughttypeerror:无法读取未定义的属性'roleid'”这里是:roleid(data.roleid)对,您必须传入
数据
。使其成为user.load(结果)
。但是您可能应该只使用传递给rolemodel的值(当前被忽略)。最后一件事是,当选择一个选项时,如何在文本框上显示rolename和roleid?感谢您的时间,我不知道输入绑定到哪个viewmodel。您的
仅使用roleid
作为其值,因此您将丢失rolename
。取消设置选项值
,添加一个值
绑定,以便在选中时设置某些内容,然后在输入的值
绑定中引用该内容。模型应为“roleViewModel”。我相信select中的每个项目现在都是一个模型?对不起,这是我第一次和knockout互动