knockout replace - 动态本地绑定指令

时间:2012-03-11 15:23:37

标签: jquery knockout.js

我有一个奇怪的用例,我需要在应用绑定之前更改以下内容。

<!-- ko foreach: model.dogs-->
html
<!-- /ko -->

要          HTML     

这是我到目前为止,但我不知道如何更新dom中的注释元素

var commented = $el.contents().filter(function(){
return this.nodeType == 8;
})
commented.each(function(i, item){
//replace text
//item.replace("dogs", "dogs2");
})

任何指针都非常赞赏。

2 个答案:

答案 0 :(得分:2)

您可以使用nodeValue获取并设置domelement节点。

item.nodeValue = item.nodeValue.replace('dogs', 'dogs2');

所有浏览器都支持:http://www.quirksmode.org/dom/w3c_core.html

答案 1 :(得分:0)

不要乱用DOM。修改低级DOM API的注释不会神奇地更新您的高级视图。只需创建一个适当的ViewModel来处理这种情况。

dogs1 = ko.observableArray([1,2,3]);
dogs2 = ko.observableArray([4,5,6]);

viewModel.dogGroup = ko.observable("dogs1");
viewModel.displayedDogs = ko.computed(function() {
    return (viewModel.tab() == "dogs1" ? dogs1() : dogs2());
  });