这是我的观点模型:
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();
}
任何人都可以建议我怎么做。
答案 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;
希望这有帮助。