根据列表的 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'
});