2011-12-16 168 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; 
    } 
}