需要了解在 MVC 4 中使用 Knockout 显示数据
Need to understand Display data using Knockout in MVC 4
我对 Knockoutjs 不是很熟悉。所以我正在阅读关于 Knockoutjs 的文章。这是我阅读的 url http://www.c-sharpcorner.com/UploadFile/raj1979/display-data-using-knockout-in-mvc-4/。
看不懂Knockoutjs相关代码
<script type="text/javascript">
function EmployeeViewModel() {
var self = this;
//Declare observable
self.EmployeeID = ko.observable("");
self.FirstName = ko.observable("");
self.LastName = ko.observable("");
self.City = ko.observable("");
self.Region = ko.observable("");
self.PostalCode = ko.observable("");
self.Country = ko.observable("");
var Employee = {
EmployeeID: self.EmployeeID,
FirstName: self.FirstName,
LastName: self.LastName,
City: self.City,
Region: self.Region,
PostalCode: self.PostalCode,
Country: self.Country
};
self.Employee = ko.observable();
self.Employees = ko.observableArray();
// Initialize the view-model
$.ajax({
url: '@Url.Action("GetAllEmployees", "Employee")',
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: {},
success: function (data) {
self.Employees(data);
}
});
$(document).ready(function () {
var viewModel = new EmployeeViewModel();
ko.applyBindings(viewModel);
});
}
</script>
我知道第一个 EmployeeViewModel()
函数被调用了。
我理解这种方式声明可观察 属性。
问题区域 1
var self = this;
self.EmployeeID = ko.observable("");
self.FirstName = ko.observable("");
self.LastName = ko.observable("");
self.City = ko.observable("");
self.Region = ko.observable("");
self.PostalCode = ko.observable("");
self.Country = ko.observable("");
但我不明白下面的代码.....只是看看并告诉我它在做什么
问题区域 2
var Employee = {
EmployeeID: self.EmployeeID,
FirstName: self.FirstName,
LastName: self.LastName,
City: self.City,
Region: self.Region,
PostalCode: self.PostalCode,
Country: self.Country
};
self.Employee = ko.observable();
self.Employees = ko.observableArray();
就是不明白how each Employee will be pushed to Employees arrays
?
如果可能的话,请帮助我理解完整的 knockout js 相关代码,比如正在发生的事情。谢谢
self.Employee = ko.observable();
我没有看到 Employee
在 js 代码中的任何地方被使用。我假设它可能被声明为存储正在更新的当前实例。
self.Employees = ko.observableArray();
但是 Employees
被定义为 ObservableArray
这意味着 Knockout 将继续监视该数组,并且当任何东西被分配给该数组或添加到该数组时它也会更新 ui 一些 foreach 类型的东西会被实现的地方。
对于可观察数组和 foreach 绑定,请查看 官方文档 of knockout js => link
更新
Employees 集合在以下 html 中具有绑定。
<tbody data-bind="foreach: Employees">
<tr>
<td data-bind="text: EmployeeID">
</td>
<td data-bind="text: FirstName">
</td>
<td data-bind="text: LastName">
</td>
<td data-bind="text: City">
</td>
<td data-bind="text: Region">
</td>
<td data-bind="text: PostalCode">
</td>
<td data-bind="text: Country">
</td>
<td>
<button data-bind="click: $root.edit">
Edit</button>
<button data-bind="click: $root.delete">
Delete</button>
</td>
</tr>
</tbody>
因此在 ajax 成功调用后 Json 将返回的任何内容都将分配给下面代码段中定义的员工集合。
$.ajax({
url: '@Url.Action("GetAllEmployees", "Employee")',
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: {},
success: function (data) {
self.Employees(data);
}
});
现在轮到创建与 Employees 可观察数组中一样多的行了。即使您在运行时向该可观察数组添加任何对象,它也会为您创建 tr 和 td 标签。你不需要为此烦恼。
我对 Knockoutjs 不是很熟悉。所以我正在阅读关于 Knockoutjs 的文章。这是我阅读的 url http://www.c-sharpcorner.com/UploadFile/raj1979/display-data-using-knockout-in-mvc-4/。
看不懂Knockoutjs相关代码
<script type="text/javascript">
function EmployeeViewModel() {
var self = this;
//Declare observable
self.EmployeeID = ko.observable("");
self.FirstName = ko.observable("");
self.LastName = ko.observable("");
self.City = ko.observable("");
self.Region = ko.observable("");
self.PostalCode = ko.observable("");
self.Country = ko.observable("");
var Employee = {
EmployeeID: self.EmployeeID,
FirstName: self.FirstName,
LastName: self.LastName,
City: self.City,
Region: self.Region,
PostalCode: self.PostalCode,
Country: self.Country
};
self.Employee = ko.observable();
self.Employees = ko.observableArray();
// Initialize the view-model
$.ajax({
url: '@Url.Action("GetAllEmployees", "Employee")',
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: {},
success: function (data) {
self.Employees(data);
}
});
$(document).ready(function () {
var viewModel = new EmployeeViewModel();
ko.applyBindings(viewModel);
});
}
</script>
我知道第一个 EmployeeViewModel()
函数被调用了。
我理解这种方式声明可观察 属性。
问题区域 1
var self = this;
self.EmployeeID = ko.observable("");
self.FirstName = ko.observable("");
self.LastName = ko.observable("");
self.City = ko.observable("");
self.Region = ko.observable("");
self.PostalCode = ko.observable("");
self.Country = ko.observable("");
但我不明白下面的代码.....只是看看并告诉我它在做什么
问题区域 2
var Employee = {
EmployeeID: self.EmployeeID,
FirstName: self.FirstName,
LastName: self.LastName,
City: self.City,
Region: self.Region,
PostalCode: self.PostalCode,
Country: self.Country
};
self.Employee = ko.observable();
self.Employees = ko.observableArray();
就是不明白how each Employee will be pushed to Employees arrays
?
如果可能的话,请帮助我理解完整的 knockout js 相关代码,比如正在发生的事情。谢谢
self.Employee = ko.observable();
我没有看到 Employee
在 js 代码中的任何地方被使用。我假设它可能被声明为存储正在更新的当前实例。
self.Employees = ko.observableArray();
但是 Employees
被定义为 ObservableArray
这意味着 Knockout 将继续监视该数组,并且当任何东西被分配给该数组或添加到该数组时它也会更新 ui 一些 foreach 类型的东西会被实现的地方。
对于可观察数组和 foreach 绑定,请查看 官方文档 of knockout js => link
更新
Employees 集合在以下 html 中具有绑定。
<tbody data-bind="foreach: Employees">
<tr>
<td data-bind="text: EmployeeID">
</td>
<td data-bind="text: FirstName">
</td>
<td data-bind="text: LastName">
</td>
<td data-bind="text: City">
</td>
<td data-bind="text: Region">
</td>
<td data-bind="text: PostalCode">
</td>
<td data-bind="text: Country">
</td>
<td>
<button data-bind="click: $root.edit">
Edit</button>
<button data-bind="click: $root.delete">
Delete</button>
</td>
</tr>
</tbody>
因此在 ajax 成功调用后 Json 将返回的任何内容都将分配给下面代码段中定义的员工集合。
$.ajax({
url: '@Url.Action("GetAllEmployees", "Employee")',
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: {},
success: function (data) {
self.Employees(data);
}
});
现在轮到创建与 Employees 可观察数组中一样多的行了。即使您在运行时向该可观察数组添加任何对象,它也会为您创建 tr 和 td 标签。你不需要为此烦恼。