使用自定义绑定更新元素文本

时间:2016-02-24 13:31:00

标签: javascript knockout.js

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

centralManagerDidUpdateState

我应该如上所述使用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回调?如果我理解正确的话,只有当一个observable作为值传递时才会被调用?

1 个答案:

答案 0 :(得分:1)

如果要支持绑定处理程序的输入是动态的,则需要update。在您的示例中,您不会这样做,但可以。这是一个例子:

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对资源的附加价值: - )