javascript - 使用自定义绑定(bind)更新元素文本

标签 javascript knockout.js

我正在制作我的第一个自定义绑定(bind)。我希望能够根据资源文件指定元素上显示的文本。像这样的事情:

var exampleResource = {
    hello: 'world'
};

ko.bindingHandlers.resource = {

    init: function (element, valueAccessor) {

        var value = valueAccessor();

        ko.bindingHandlers.text.update(element, function() { 
            return exampleResource[value] || '';
        });
    }

};

<span data-bind="resource: 'hello'"></span>

我应该像上面那样使用ko.bindingHandlers.text吗?

由于资源变量不可观察,是否有必要为绑定(bind)添加 update 回调?如果我理解正确的话,只有当可观察值作为值传递时才会被调用?

最佳答案

如果您希望支持动态绑定(bind)处理程序的输入,则需要更新。在您的示例中,您没有这样做,但您可以。这是一个例子:

var exampleResource = {
    hello: 'world',
    goodbye: 'drowl'
};

ko.bindingHandlers.resource = {
    update: function (element, valueAccessor) {
        var key = ko.utils.unwrapObservable(valueAccessor());
        ko.bindingHandlers.text.update(element, function() { 
            return exampleResource[key] || key;
        });
    }
};

ko.applyBindings({ myObs: ko.observable('goodbye') });
span { font-weight: bold; color: red; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>

Static: <span data-bind="resource: 'hello'"></span>
<hr>
Dynamic: <span data-bind="resource: myObs"></span>
- based on: <select data-bind="value: myObs, options: ['hello', 'goodbye']"></select>

如果您不需要这种动态性,您可以坚持使用旧的解决方案。然而,在这种情况下,我会质疑 KnockoutJS 对一般资源的附加值(value):-)

关于javascript - 使用自定义绑定(bind)更新元素文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35603612/

相关文章:

knockout.js - KnockoutJS bindinghandler with childBindingContext - $data === $parent

css - knockout 每个 css 多个类 $data

javascript - knockoutjs 在 with 中调用 click 方法

javascript - jquery wrap, append, prepend 到父 div

javascript - 将 Prop 添加到作为 Prop 传递的 React 组件?

javascript - 没有捕获来自连接js的提交,在哪里挖掘?

javascript - 为什么 $.extend(window, window, someobject) 会触发页面刷新?

javascript - 如何使用knockoutjs绑定(bind)嵌套输入

JavaScript Prototype 属性未添加到其继承的对象中

knockout.js - Knockout Native 绑定(bind),无容器绑定(bind)的语法错误