把条件放在淘汰赛中的self.load功能上

时间:2016-01-15 11:47:01

标签: javascript asp.net-mvc knockout.js

这是我的观点模型:

function viewModel() {
    var self = this;
    self.posts = ko.observableArray();
    self.newMessage = ko.observable();
    self.error = ko.observable();

这些是我的两个加载函数:

self.reloadPosts = function () {
        $.ajax({
            type: "Get",
            url: postApiUrl2,
            data: { id: $("#Locations").val() },
            datatype: "json",
            contentType: "application/json"
        })
    }

    self.loadPosts = function () {
        // to load existing posts
        $.ajax({
            url: postApiUrl1,
          //  data: { id: $("#Locations").val() },
            datatype: "json",
            contentType: "application/json",
            cache: false,
            type: 'Get'
        })         
    }
self.loadPosts();
self.reloadPosts();
return self;

这里,self.loadPosts是没有参数的函数,self.reloadPosts将选定的下拉列表ID传递给控制器​​。

我的问题是 - 是否可以将条件置于此处,以便self.reloadPosts只应在视图页面上加载数据时加载数据。 现在,这两个都是逐个加载的。我想通过某种条件来控制它。这段代码在.js文件中不在.cshtml页面上。

我正在尝试这样的事情,但在第一行得到未被捕获的引用错误:

  if (id != null) {
    self.reloadPosts();
}
else {
    self.loadPosts();
}

任何人都可以建议我怎么做。

1 个答案:

答案 0 :(得分:0)

我不知道#locations所指的是什么,但如果它是一个选择列表或其他东西在HTML中尝试这个(例如):

<select data-bind="value: locations">
  <option>location 1</option>
  <option>location 2</option>
<select>

并更改脚本:

function viewModel() {
    var self = this;
    // location will be stored here
    self.locations = ko.observable();

    self.posts = ko.observableArray();
    self.newMessage = ko.observable();
    self.error = ko.observable();

    // we can avoid some repeat code:
    self.loadPosts = function () {
        // read value
        var id = self.locations();
        // set url and data
        var url = (id) ? postApiUrl2 : postApiUrl1;
        var data = (id) ? { id: id } : null;
        $.ajax({
            type: "Get",
            url: url,
            data: data,
            datatype: "json",
            contentType: "application/json"
        })
    }

self.loadPosts();
return self;

希望这有帮助。