Jquery Knockout-ajax.load页面的一个视图模型

Jquery Knockout-ajax.load页面的一个视图模型,jquery,knockout.js,Jquery,Knockout.js,我在一个有两个选项卡的页面中有一个viewmodel,当页面加载时viewmodel被绑定,当我单击第二个选项卡时,我使用ajax.load加载内容。但是在这个页面中,我想使用在有选项卡的页面中定义的viewmodel,这是可能的吗?简而言之-“是的,这是可能的!”。 实施示例: var yourFirstTabViewModel = { name: ko.observable("John") } var yourSecondTabViewModel = { someCount

我在一个有两个选项卡的页面中有一个viewmodel,当页面加载时viewmodel被绑定,当我单击第二个选项卡时,我使用ajax.load加载内容。但是在这个页面中,我想使用在有选项卡的页面中定义的viewmodel,这是可能的吗?

简而言之-“是的,这是可能的!”。 实施示例:

var yourFirstTabViewModel = {
    name: ko.observable("John")
}

var yourSecondTabViewModel = {
    someCounter:ko.observable(100)
}


var mainViewModel = {
     changeTab : function(tabIndex) {
         if (tabIndex == 0) {
             $("#tabsContentContainer").load("youPageTabTemplate", function() {
                 ko.applyBindingsToDescendants(yourFirstTabViewModel, $("#tabsContentContainer")[0]);
             });
         } else {
             $("#tabsContentContainer").load("youPageTabTemplate2", function () {
                 ko.applyBindingsToDescendants(yourSecondTabViewModel, $("#tabsContentContainer")[0]);
             });
         }
     }
}

ko.applyBindings(mainViewModel, $("#tabsContainer")[0])
以及您的标记:

<div id="tabsContainer">
  <button data-bind="click:changetab.bind($data, 0)">First tab</button>
  <button data-bind="click:changetab.bind($data, 1)">Second tab</button>
  <div id="tabsContentContainer"></div>
</div>

第一选项卡
第二选项卡
这会起作用,但它不是一个击倒方式!您应该考虑使用<代码>模板<代码>敲除绑定,而不是<代码> Ajax。您可以在淘汰赛网站上找到有关
模板
绑定的信息:

此外,您还可以查看
淘汰amd helpers
,它仅在需要时使用require.js加载模板/视图模型。以下是网站:

这个例子违背了击倒的基本原则。您不应该在viewmodel中执行任何DOM操作。请再次阅读我的答案!我已经提到在这种情况下使用模板绑定会更正确,但问题不是正确的方式。啊,我确实忽略了“不是淘汰方式”的警告。考虑到人们倾向于草率地阅读(举例说明)和复制/粘贴代码样本,只要它们能正常工作,也许最好不要推广使用错误的样本。@Maris,谢谢你的输入,我确实尝试了淘汰版amd herlpers,这很酷,但我一直因为我的viewmodel而出错,没关系,我使用了您建议的第一种方法ko.applyBindings(mainViewModel,$(“#tabsContainer”)[0]),但是我没有让viewmodel知道DOM,我只是在单击第二个选项卡时在DOM对象上添加了applyBindings