获取数据绑定元素(使用KnockoutJS)

时间:2013-06-28 12:17:50

标签: javascript jquery knockout.js

目标

获取触发函数的元素。

问题

请参阅我的代码:

    <span data-bind="ifnot: ProductLayout.existsAtSummary()">
        <button class="btn btn-success btn-small add"
            title="Adicionar à lista de comparação">
            <i class="icon-plus"></i>
        </button>
    </span>

    <span data-bind="if: ProductLayout.existsAtSummary()">
        <button class="btn btn-danger btn-small remove"
            title="Remover da lista de comparação">
            <i class="icon-remove"></i>
        </button>
    </span>

如您所见,我在existsAtSummary()if为真或假时触发ifnot功能。

但是这些按钮属于foreach,我需要让它们的元素一起工作,我不知道如何。

我的JS:

function ProductLayoutViewModel() {
    var self = this;

    self.existsAtList = function () {
        return true;
    };
}

ko.applyBindings(new ProductLayoutViewModel());

查看我的代码here, on JSFiddle

我的想法

我在想这个:

self.existsAtList = function (element) {
    console.log(element); // returns me 'undefined'
    return true;
};

但正如我所评论的那样,控制台让我“未定义”。

有什么想法吗?

详细

如有必要,我可以使用jQuery

1 个答案:

答案 0 :(得分:2)

我认为你要找的是$element

<span data-bind="ifnot: existsAtList($element)">
    <button class="btn btn-success btn-small add" 
            title="Adicionar à lista de comparação">
        <i class="icon-plus"></i>
    </button>
</span>

<span data-bind="if: existsAtList($element)">
    <button class="btn btn-success btn-small add" 
            title="Eliminar de lista de comparação">
        <i class="icon-minus"></i>
    </button>
</span>

function ProductLayoutViewModel() {
    var self = this;

    self.existsAtList = function (element) {
        console.log(element);
        return true;
    };
}

ko.applyBindings(new ProductLayoutViewModel());

请参阅http://jsfiddle.net/rSD7q/1/