knockout js - 替换绑定文本

时间:2014-01-20 21:44:13

标签: knockout.js

为显示目的修改绑定文本的最佳方法是什么?

计算字段,自定义绑定等?

例如,你有一个对象“Foo”,属性为“Bar”,是一个字符串,有破折号,你想用破折号替换破折号:

JSFIDDLE:http://jsfiddle.net/yUceG/

JavaScript的:

function MyViewModel() {
     this.theFoo = { Bar: "abc-def-xyz" };
     }
     ko.applyBindings(new MyViewModel());

视图可能如下所示

<div data-bind="with: theFoo">
   <span data-bind="text : Bar" />
</div>

或者这个 -

<!--ko with: theFoo -->
   <!--ko text: Bar--><!--/ko-->
<!--/ko-->

1 个答案:

答案 0 :(得分:1)

一种方法是使用自定义绑定处理程序。

ko.bindingHandlers.lineBreaks = {
    init: function (element, valueAccessor, allBindings, data, context) {        
        $(element).html(value.replace(/-/g, '<br />'));      
    }
};

请参阅updated fiddle

如果observable的值可能会改变,那么你可以使用init中的相同代码向绑定处理程序添加更新部分。

ko.bindingHandlers.lineBreaks = {
    init: function (element, valueAccessor, allBindings, data, context) {          
        $(element).html(value.replace(/-/g, '<br />'));      
    },
    update: function (element, valueAccessor, allBindings, data, context) {
        $(element).html(value.replace(/-/g, '<br />'));      
    }
};

现在,当observable的值更新时,显示的值将通过绑定处理程序进行格式化。

您也可以使用extender获得相同的效果。