2011-12-16 124 views
0

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

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中添加截断版本。

感谢您看看事物。

+0

好。因此,在调试代码中搜索Knockout.js后,我遇到了默认的文本绑定,并将其用作模板。我会在一秒之内发布绑定,以及我使用它的方式。 – 2011-12-16 15:12:02

+0

乔尔,我的理解是正确的,你找到了解决你自己的问题?如果是这样,请在此处作为答案张贴并标记为答案。这样,您的问题有利于KnockoutJS社区,并且您的问题不再显示为未答复。 – 2012-01-17 16:01:41

回答

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> 

哪里描述是可观察到的。

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; 
    } 
}