0

我有一个自定义绑定,用于截断可观察数组中的描述。我只是想知道更改返回绑定的文本的最佳方法。

    ko.bindingHandlers.summarize = { 
        init: function(element, valueAccessor, allBindingsAccessor, context) {
            var pattern = new RegExp(/^[^.]+/);
            var summarized = pattern.exec(context.description());
            //How do I set the text to the summarized value?
        }
    }

页面上的其他地方使用了广泛的描述。此截断版本用于侧边栏中。愿意接受有关解决此问题的更好方法的建议,但这对我来说似乎是最好的方法。

viewModel 是通过映射插件从 JSON 文件生成的,或者我直接在 viewmodel 中添加一个截断的版本。

谢谢你看东西。

4

2 回答 2

3

这就是我所做的。一旦我查看了淘汰赛库的来源,这很简单。我强烈建议在库代码中进行挖掘。对于学习来说是无价的。

ko.bindingHandlers.summarize = { 
    init: function(element, valueAccessor, allBindingsAccessor, context) {
    var pattern = new RegExp(/^[^.]+/);
    var summarized = pattern.exec(context.description());
    typeof element.innerText == "string" ? element.innerText = summarized
                                         : element.textContent = summarized;
    }
}

要在模板中使用它,您只需:

<p data-bind='summarize: description'></p>

描述将是可观察的。

于 2012-01-17T20:47:14.743 回答
0

在您的示例中,您将自定义绑定与绑定语句中的描述相关联data-bind='summarize: description',因此您可以使用该valueAccessor参数以获得更大的灵活性。

我更进一步并使用了该ko.unwrap函数,因此您的自定义绑定也可以处理不可观察的值:

ko.bindingHandlers.summarize = { 
    init: function(element, valueAccessor, allBindingsAccessor, context) {
    var pattern = new RegExp(/^[^.]+/);
    var summarized = pattern.exec(ko.unwrap( valueAccessor() ) );
    typeof element.innerText == "string" ? element.innerText = summarized
                                         : element.textContent = summarized;
    }
}
于 2016-02-25T02:16:49.877 回答