knockoutjs嵌套视图动态加载

时间:2012-03-15 02:33:50

标签: jquery knockout.js

有类似knockout.refresh绑定吗?

我正在尝试使用main.htm,myview.htm

main.htm有一个带有可观察的currentviewmodel的pageviewmodel。

main.htm中:

<div id="page">
   <div data-bind="html:CurrentViewModel().Render"> </div>
</div>

带有脚本块

  var appViewModel = function(){
       var self = this;
       self.CurrentViewModel = ko.observable({Render:function(){return '';}});
       return self;
    };
    var myViewModel = function(){
       var self = this;
       self.Render = ko.observable('');
       self.Name = ko.observable('blah');
       self.Load = function(){
          $.get('views/myview.htm', function(data) {
             var res = data;
             self.Render(res);
             self.Name('blldjkfa');
          },"html");
       };
       return self;
    };

var pagemodel = new appViewModel(); ko.applyBindings(pagemodel,$( '#页')[0]);

myView.htm:

<div>
hello world <span data-bind="text:Name">a</span>
</div>

在某些时候,当前视图模型被设置

var loadedModel = new mainViewModel();
pagemodel.CurrentViewModel(loadedModel);
loadedModel.Load();

当调用load时,将填充站点的html但不应用data-bind。 但是,如果我将具有相同a的跨度放入块中,它会显示来自新视图模型的数据。

...让我相信我需要以某种方式刷新绑定......或者以不同的方式设置html?

1 个答案:

答案 0 :(得分:0)

是的,您只需使用以下参数调用applyBindings

ko.applyBindings(yourModel, HTMLElement);

如果您正在使用jQuery,HTMLElement就像$('#yourElementId')[0]。 Knockout将以该元素开头的绑定应用为根。您可以在“激活淘汰赛”部分下阅读有关applyBindings此处http://knockoutjs.com/documentation/observables.html的更多信息。祝你好运。