根据列表的 select 项更新 url 并调用 Web 服务(剔除)
Update url and call web service depending on select item of a list (knockout)
我是 Knockout 的新手,目前我一直在尝试使用从列表中选择的 ID 作为我的 url 的参数来调用 Web 服务。设置 var IssueCollection 时,我试图获取名为 selectedListItem 的可观察对象的当前状态,以将其附加到我的新 url网络服务。问题是它似乎没有更新,也没有调用网络服务。
提前致谢!
function viewModel()
{
var self = this;
self.serviceURL = 'http://url/account';
self.Employees = ko.observableArray([]);
self.EmplCol = ko.observable();
self.fetch = function(successCallBack){
self.EmplCol().fetch({
success: successCallBack,
error: function(jqXHR, textStatus, errorThrown){
console.log('Error in fetch: '+ textStatus);
}
});
}
self.serviceIssueURL = 'http://127.0.0.1:7101/CLM2-RESTWebService-context-root/rest/v1/issue';
self.Issues = ko.observableArray([]);
self.IssueCol = ko.observable();
self.fetch2 = function(successCallBack){
self.IssueCol().fetch({
success: successCallBack,
error: function(jqXHR, textStatus, errorThrown){
console.log('Error in fetch: '+ textStatus);
}
});
}
self.selectedItem = ko.observable("save");
self.selectedListItem = ko.observable(0);
self.sListItem= ko.observable();
self.value1 = ko.observable(20);
self.value2 = ko.observable(40);
self.thresholdValues = [{max: 33}, {max: 67}, {}];
var converterFactory = oj.Validation.converterFactory('number');
var currencyConverter = converterFactory.createConverter({style: 'currency', currency: 'USD'});
self.valueConverter = ko.observable(currencyConverter);
parseEmpl = function(response){
return {AccountId: response['AccountId'],
CustomerName: response['CustomerName'],
Address1: response['Address1']};
};
var Employee = oj.Model.extend({
urlRoot: self.serviceURL,
parse: parseEmpl,
idAttribute: 'AccountId'
});
var myEmpl = new Employee();
var EmplCollection = oj.Collection.extend({
url: self.serviceURL + "?limit=20",
model: myEmpl
});
self.EmplCol(new EmplCollection());
self.dataSource = new oj.CollectionTableDataSource(self.EmplCol(), {idAttribute: 'AccountId'});
parseIssue = function(response){
return {IssueId: response['IssueId'],
Summary: response['Summary'],
AccountId: response['AccountId']};
};
var Issue = oj.Model.extend({
urlRoot: self.serviceIssueURL,
parse: parseIssue,
idAttribute: 'IssueId'
});
var myIssue = new Issue();
var IssueCollection = oj.Collection.extend({
url: self.serviceIssueURL + "?q=AccountId="+self.selectedListItem(),
model: myIssue
});
self.IssueCol(new IssueCollection());
self.dSource = new oj.CollectionTableDataSource(self.IssueCol(), {idAttribute: 'IssueId'});
}
return {'empVM': viewModel};
您的问题是 IssueCollection
变量中没有任何内容表示如果 self.selectedListItem
发生变化,它应该更新。您必须使用 computed
变量来启用此功能。另外,您应该使模型的 IssueCollection
成为 属性。见下文,同时检查 Fiddle.
self.IssueCollection = oj.Collection.extend({
url: ko.computed( function() { return self.serviceIssueURL +
"?q=AccountId="+self.selectedListItem() }),
model: 'myIssue'
});
我是 Knockout 的新手,目前我一直在尝试使用从列表中选择的 ID 作为我的 url 的参数来调用 Web 服务。设置 var IssueCollection 时,我试图获取名为 selectedListItem 的可观察对象的当前状态,以将其附加到我的新 url网络服务。问题是它似乎没有更新,也没有调用网络服务。
提前致谢!
function viewModel()
{
var self = this;
self.serviceURL = 'http://url/account';
self.Employees = ko.observableArray([]);
self.EmplCol = ko.observable();
self.fetch = function(successCallBack){
self.EmplCol().fetch({
success: successCallBack,
error: function(jqXHR, textStatus, errorThrown){
console.log('Error in fetch: '+ textStatus);
}
});
}
self.serviceIssueURL = 'http://127.0.0.1:7101/CLM2-RESTWebService-context-root/rest/v1/issue';
self.Issues = ko.observableArray([]);
self.IssueCol = ko.observable();
self.fetch2 = function(successCallBack){
self.IssueCol().fetch({
success: successCallBack,
error: function(jqXHR, textStatus, errorThrown){
console.log('Error in fetch: '+ textStatus);
}
});
}
self.selectedItem = ko.observable("save");
self.selectedListItem = ko.observable(0);
self.sListItem= ko.observable();
self.value1 = ko.observable(20);
self.value2 = ko.observable(40);
self.thresholdValues = [{max: 33}, {max: 67}, {}];
var converterFactory = oj.Validation.converterFactory('number');
var currencyConverter = converterFactory.createConverter({style: 'currency', currency: 'USD'});
self.valueConverter = ko.observable(currencyConverter);
parseEmpl = function(response){
return {AccountId: response['AccountId'],
CustomerName: response['CustomerName'],
Address1: response['Address1']};
};
var Employee = oj.Model.extend({
urlRoot: self.serviceURL,
parse: parseEmpl,
idAttribute: 'AccountId'
});
var myEmpl = new Employee();
var EmplCollection = oj.Collection.extend({
url: self.serviceURL + "?limit=20",
model: myEmpl
});
self.EmplCol(new EmplCollection());
self.dataSource = new oj.CollectionTableDataSource(self.EmplCol(), {idAttribute: 'AccountId'});
parseIssue = function(response){
return {IssueId: response['IssueId'],
Summary: response['Summary'],
AccountId: response['AccountId']};
};
var Issue = oj.Model.extend({
urlRoot: self.serviceIssueURL,
parse: parseIssue,
idAttribute: 'IssueId'
});
var myIssue = new Issue();
var IssueCollection = oj.Collection.extend({
url: self.serviceIssueURL + "?q=AccountId="+self.selectedListItem(),
model: myIssue
});
self.IssueCol(new IssueCollection());
self.dSource = new oj.CollectionTableDataSource(self.IssueCol(), {idAttribute: 'IssueId'});
}
return {'empVM': viewModel};
您的问题是 IssueCollection
变量中没有任何内容表示如果 self.selectedListItem
发生变化,它应该更新。您必须使用 computed
变量来启用此功能。另外,您应该使模型的 IssueCollection
成为 属性。见下文,同时检查 Fiddle.
self.IssueCollection = oj.Collection.extend({
url: ko.computed( function() { return self.serviceIssueURL +
"?q=AccountId="+self.selectedListItem() }),
model: 'myIssue'
});