Javascript 淘汰字符串格式模式

Javascript 淘汰字符串格式模式,javascript,knockout.js,binding,custom-binding,Javascript,Knockout.js,Binding,Custom Binding,在WPF中有一个我经常使用的绑定 <GridViewColumn DisplayMemberBinding="{Binding Path=Price, StringFormat=Now {0:c}!}"/> 其中1是产品组,2是产品的id,因为您希望格式化显示值(ui)并跟踪其更改,因此调用sprintf库的自定义绑定是最合适的解决方案,它还提供了可重用性,例如: ko.bindingHandlers.sprintf = { update: function(element

在WPF中有一个我经常使用的绑定

<GridViewColumn DisplayMemberBinding="{Binding Path=Price, StringFormat=Now {0:c}!}"/>

其中1是产品组,2是产品的id,因为您希望格式化显示值(ui)并跟踪其更改,因此调用sprintf库的自定义绑定是最合适的解决方案,它还提供了可重用性,例如:

ko.bindingHandlers.sprintf = {
    update: function(element, valueAccessor) {
        var options = valueAccessor();
        var formatted = sprintf(ko.unwrap(options.format), 
                                ko.unwrap(options.args).map(function(arg) {
                                    return ko.unwrap(arg);
                                });
        if(options.attr) {
            element.setAttribute(options.attr, formatted);
        } else {
            element.textContent = formatted;
        }
    }
}
其中,此自定义绑定需要具有以下属性的配置对象:

  • attr
    :要更新的属性(如果要更新元素的文本内容,则为null)
  • 格式
    :字符串格式
  • args
    :格式化args
用法:

<a data-bind="sprintf: { attr:'href', 
                         format:'#products/%0/product/%1', 
                         args: [val1, val2] }">
    click
</a>
// val1 & val2 are ko observables

演示:

这可能很有用:太棒了,找到我想要的东西:)
<a data-bind="sprintf: { attr:'href', 
                         format:'#products/%0/product/%1', 
                         args: [val1, val2] }">
    click
</a>
// val1 & val2 are ko observables
<a data-bind="attr: { href: sprintf('#products/%0/product/%1', 
                                    [val1(), val2()]) 
                    }">
    click
</a>