我正在制作我的第一个自定义绑定。我希望能够根据资源文件指定元素上显示的文本。像这样:
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作为值传递时才会被调用?
答案 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对资源的附加价值: - )