knockout.js 引导程序的工具提示不适用于敲除绑定?(w fiddle)

djp7away  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(160)

小提琴:http://jsfiddle.net/LkqTU/9399/
编码:

var ViewModel = function (first, last) {
    var self = this;
    self.showIcon = ko.observable(false);
    self.triggerIcon = function () {
        self.showIcon(true);
    };
};
$('.card-delete-button').tooltip({
    'placement': 'top',
        'title': 'Text'
});
ko.applyBindings(new ViewModel("Planet", "Earth"));

由于某些原因,工具提示没有显示'.card-delete-button'。我认为这是因为DOM元素在触发器函数被点击之前是不可用的。但是在应用程序中,我必须将这些工具提示绑定到许多不同的元素,并且我更喜欢在一个地方一次性完成,而不是将绑定粘贴到触发器函数中。如何实现这一点?

368yc8dk

368yc8dk1#

在这种情况下,您最好的办法是创建一个自定义绑定,您可以使用它将工具提示放置在标记中的任何位置。
以下是工具提示绑定的一个实现:

ko.bindingHandlers.tooltip = {
    init: function(element, valueAccessor) {
        var local = ko.utils.unwrapObservable(valueAccessor()),
            options = {};

        ko.utils.extend(options, ko.bindingHandlers.tooltip.options);
        ko.utils.extend(options, local);

        $(element).tooltip(options);

        ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
            $(element).tooltip("destroy");
        });
    },
    options: {
        placement: "right",
        trigger: "click"
    }
};

然后,您可以在页面上使用此绑定,如下所示:

<input data-bind="value: name, tooltip: { title: help, trigger: 'hover' }" />

您可以全局设置选项,然后用传入绑定的任何内容重写它们。
当您进入模板和控制流场景时,使用自定义绑定确实很有帮助,因为它将在正确的时间自动初始化(和清理),而不需要手动知道何时调用代码。
下面是一个示例:http://jsfiddle.net/rniemeyer/BF5yW/

cotxawn7

cotxawn72#

@RP尼迈耶回答的附录......
在github上有一个名为Knockout-Bootstrap的小项目,用于“与Bootstrap和Knockout绑定进行丰富的双向交互”。
下面是一个叉子的小提琴,其中包括敲出靴带。
http://jsfiddle.net/qZkXP/

<div class='liveExample' data-bind="event: {mouseover: triggerIcon}">   
    <!-- ko if: showIcon -->
    <a class="card-delete-button" 
       data-bind="tooltip: {title: 'Another tooltip', placement: 'right'}">
           <i class="icon-trash"></i>
    </a>
    <!-- /ko -->
</div>
vh0rcniy

vh0rcniy3#

我也遇到了一些关于与knockout绑定的问题,RP Niemeyer提供的答案帮助了我。但是,当我试图绑定一个返回工具提示选项对象的函数时,没有调用它(它只被调用过一次)。所以如果我试图根据Map的css类动态地改变工具提示的标题,它是不起作用的。所以,我找到解决办法是:

ko.bindingHandlers["tooltip"] = {
'init': function (element, valueAccessor) {
    var local = ko.utils.unwrapObservable(valueAccessor());
    var options = {};

    ko.utils.extend(options, ko.bindingHandlers.tooltip.options);
    ko.utils.extend(options, local);

    $(element).tooltip(options);

    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
        $(element).tooltip("destroy");
    });
},
'update': function (element, valueAccessor) {
    var local = ko.utils.unwrapObservable(valueAccessor());
    var options = {};

    ko.utils.extend(options, ko.bindingHandlers.tooltip.options);
    ko.utils.extend(options, local);

    $(element).data("bs.tooltip").options.title = options.title;
},
options: {
    placement: "top",
    trigger: "click"
}};

我想在这里做这个注解,因为我认为在工具提示的标题必须动态更改的情况下,它会很有用。

bpsygsoo

bpsygsoo4#

阿迪·米哈桑提供的答案几乎对我起作用了,我不得不做出以下改变,这可能也会帮助其他人。

$(element).tooltip("destroy");

$(element).tooltip("dispose");

以及

$(element).data("bs.tooltip").options.title = options.title

$(element).data("bs.tooltip").config.title = options.title

相关问题