【问题标题】:How to get the elements bound to a model in Knockoutjs如何在 Knockoutjs 中获取绑定到模型的元素
【发布时间】:2012-02-13 06:08:02
【问题描述】:

我要添加一个产品,找到节点让它闪烁

products = observableArray([]);

new_product = new Product();
products.push(new_product);
$("tr", new_product.elements).flash();

我尝试使用 afterAdd,但每次添加内容时它都会闪烁。 我只需要使用我的添加功能之一进行闪烁。添加的其他功能不应闪烁元素。

注意:flash 是一个自定义的 JQuery 函数

【问题讨论】:

    标签: jquery knockout.js dom-node


    【解决方案1】:

    由于一个 observable 可以绑定到多个元素,最好的办法是真正从元素中以自定义绑定的形式来实现它。

    在最简单的情况下,您可以使用如下绑定:

    ko.bindingHandlers.flash = {
        init: function(element) {
            $(element).flash();
        }
    };
    

    在您的元素上使用它,例如:<li data-bind="flash: true"></li>。在这种情况下,传递给绑定的内容无关紧要。

    这是一个示例:http://jsfiddle.net/rniemeyer/Exmvh/

    您当然可以将选项传递给您的绑定,例如:

    ko.bindingHandlers.flash = {
        init: function(element, valueAccessor) {
            var duration = ko.utils.unwrapObservable(valueAccessor());
            $(element).hide().flash(duration);
        }
    };
    

    并像这样使用它:<li data-bind="flash: 500"></li> 或使用可用于控制持续时间的可观察对象:<li data-bind="flash: selectedDuration"></li>

    这是一个示例:http://jsfiddle.net/rniemeyer/Exmvh/1/

    【讨论】:

    • 谢谢,但我认为这与使用 "afterAdd: flash" 相同
    • 如何获取 observable 的多个元素?
    • 使用绑定的好处是您可以明确哪些元素具有绑定,并且可以更好地更改传递选项和响应可观察对象。你能澄清一下你所说的 observable 的多个元素是什么意思吗?
    • 另外,防止初始元素“闪烁”的一种方法是将持续时间设置为 0 直到启动后,或者读取一个标志以指示现在可以制作动画。
    • 这是另一个示例:jsfiddle.net/rniemeyer/Exmvh/2。有点满足您有时闪烁有时不闪烁的需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多