Knockout.js 仅显示多选列表中特定项目的按钮

Knockout.js 仅显示多选列表中特定项目的按钮,knockout.js,Knockout.js,我有两个多选列表,如果列表中不存在项目,您可以将其相互复制。问题是复制按钮始终可见。 我只希望当您选择其他列表中不存在的项目(通过名称进行比较)时,该按钮可见 这有可能吗 代码: 使用函数确定“复制到DB2”按钮是否必须可见: self.notExistsInDb2 = function() { if (!self.selectedStoredProceduresInDB1().length) return true; var chosenNames = sel

我有两个多选列表,如果列表中不存在项目,您可以将其相互复制。问题是复制按钮始终可见。 我只希望当您选择其他列表中不存在的项目(通过名称进行比较)时,该按钮可见

这有可能吗

代码:


使用函数确定“复制到DB2”按钮是否必须可见:

self.notExistsInDb2 = function()
{
    if (!self.selectedStoredProceduresInDB1().length)
        return true;

    var chosenNames = self.selectedStoredProceduresInDB1().map(function(i) { return i.Name; });
    var existingNames = self.storedProceduresInDB2().map(function(i) { return i.Name; });

    for (var i in chosenNames)
        if (existingNames.indexOf(chosenNames[i]) > -1) return false;

    return true;
};
然后:

复制到DB2

谢谢您的回答。按钮现在出现/消失,但如果我使用此代码,我将无法将项目复制到其他列表。这与我的代码无关,您原来的小提琴也不会添加到列表中。看,我需要按姓名而不是id进行比较。因为它们在真实数据库中总是具有唯一的id:s。然后这就行不通了。我做了相应的修改。谢谢你的帮助,伙计!
self.notExistsInDb2 = function()
{
    if (!self.selectedStoredProceduresInDB1().length)
        return true;

    var chosenNames = self.selectedStoredProceduresInDB1().map(function(i) { return i.Name; });
    var existingNames = self.storedProceduresInDB2().map(function(i) { return i.Name; });

    for (var i in chosenNames)
        if (existingNames.indexOf(chosenNames[i]) > -1) return false;

    return true;
};
<button data-bind="click: copyToDb2, visible: notExistsInDb2()">Copy to DB2</button>