0

我有一个像这样的表中的按钮

<tbody data-bind="foreach: Items">
    <tr data-bind="css: { alt: $index() % 2 }">
        <td style="width: 60%;" data-bind="    html: ItemName"></td>
        <td data-bind="    html: Quantity"></td>
        <td style="align-items: center; text-align: center;">
            <input id="btnReady" type="button" value="Ready" class="button" data-bind="click: readyItem " /></td>
    </tr>
</tbody>

我的看法是这样的

function MenuItem(data, hub) {
var self = this;
data = data || {};

// Persisted properties
self.Id = data.Id;
self.ItemId = data.ItemId;
self.OrderId = data.OrderId;
self.ItemName = ko.observable(data.ItemName || "");
self.Quantity = ko.observable(data.Quantity || "");
self.Notes = data.Notes || "";
self.Status = data.Status;
self.error = ko.observable();

self.hub = $.connection.postHub;

self.readyItem = function () {
    self.hub.server.itemReady(self.ItemId, self.OrderId).done(function () {
        $('#btnReady').attr('disabled', 'disabled');
    }).fail(function (err) {
        self.error(err);
    });
}}

当我单击上面的按钮时,总是禁用表中的第一个按钮。如何禁用单击的。请帮忙。

4

2 回答 2

1

尝试用这个替换 readyItem 处理程序:

self.readyItem = function (data, event) {
    self.hub.server.itemReady(self.ItemId, self.OrderId).done(function () {
        $(event.target).attr('disabled', 'disabled');
    }).fail(function (err) {
        self.error(err);
    });
}}

此外,ID 意味着在页面上是唯一的。如果您有多行包含一个按钮,请不要对所有行都使用#btnReady id。使每个按钮的 id 唯一,或使用一个类。

于 2013-11-01T09:48:39.970 回答
1

使用 Knockout 的disable绑定而不是手动操作 DOM。

在每个项目中,添加

self.isReady=ko.observable(false);

在 中self.readyItem,将 DOM 操作替换为

self.isReady(true);

在您的 HTML 中,添加

disable: isReady

到您的数据绑定<input>,并删除该id属性。

于 2013-11-01T11:34:52.853 回答