我在删除服务方面有些麻烦。我具有删除服务器上服务的功能,但必须重新加载页面以更新表。我找到了如何通过单击绑定来删除行的方法,但是存在一个问题,因为我只能从服务器中删除行或获取用于删除服务的ID,而不能同时应用于两者。 :/
这是删除服务器上的服务但不删除表行的代码示例。
HTML:
<table id="serviceView" class="fixed_header" border: 1>
<thead>
<tr>
<th>Name</th>
<th>Adress</th>
<th>Notification</th>
</tr>
</thead>
<tbody data-bind="foreach: services">
<tr>
<td data-bind="text: name"></td>
<td data-bind="text: address"></td>
<td data-bind="text: serviceId"></td>
<td ><button data-bind="click: $parent.DeleteService.bind(this, serviceId)">Remove</button></td>
</tr>
</tbody>
</table>
JS:
self.services = ko.observableArray([]);
self.lastCheck = ko.observable();
$.getJSON("http://localhost:55972/api/status", function (data) {
self.services(data.services);
self.lastCheck = data.lastCheck;
}); //////This is loading data to the table from server
self.DeleteService = function (serviceId) {
$.ajax({
type: "GET",
url: "http://localhost:55972/api/services/remove/" + serviceId,
}).done(function () {
self.services.remove(serviceId)
})
};
这是删除表行的代码示例
当我像这样使用单击绑定时:
<button data-bind="click: $parent.DeleteService">Remove</button>
并将删除功能更改为此:
self.DeleteService = function (serviceId) {
self.services.remove(serviceId)
$.ajax({
type: "GET",
url: "http://localhost:55972/api/services/remove/" + serviceId,
}).done(function () {
// here I want to remove row but i doesnt goes here without service ID.
})
};
它删除行,但我在URL中获得了[object,object]的serviceId。
您能帮我吗?我有主意使用jquery来更新表,但是当我可以使用淘汰赛时,这对我来说似乎不必要地复杂。
我知道解决方案并不难,但我无法解决..... -_-
很抱歉花点时间处理这些废话,但这是我第一个真正的项目,在这一点上我实在太绝望了,因为我有很多事情要做,我对此很执着。
答案 0 :(得分:1)
在您的Js代码中,您可以尝试以下操作:
self.services = ko.observableArray([]);
self.lastCheck = ko.observable();
$.getJSON("http://localhost:55972/api/status", function (data) {
self.services(data.services);
self.lastCheck = data.lastCheck;
}); //////This is loading data to the table from server
var serviceIdRemoved;
self.DeleteService = function (serviceId) {
serviceIdRemoved = serviceId; // now you can do whatever you need more with this value
$.ajax({
type: "GET",
url: "http://localhost:55972/api/services/remove/" + serviceId,
}).done(function () {
self.services.remove(serviceId)
})
};
通过这种工作方式,您可以使用变量的内容,而不会丢失它。另外,如果您获得[Object,Object],则可以:
console.log(serviceId) // to see the content in the console.
JSON.stringify(data) //to see the content in html
This source could help you以更好地理解它。
答案 1 :(得分:1)
您看到的[object,object]实际上是Knockout秘密添加到JS函数参数中的数据和事件对象。如果要将自己的参数添加到click绑定中,则应这样做:
<button data-bind="click: function(data, event) { $parent.DeleteService(serviceId, data, event) }">Remove</button>
然后您可以按以下方式定义JS函数:
self.DeleteService = function (serviceId, data, event) {
[code here...]
}
您可以在出色的Knockout文档中阅读它的确切详细信息: http://knockoutjs.com/documentation/click-binding.html
大约在标题为“ 注2:访问事件对象或传递更多参数”的标题下大约一半